我正在尝试将列表项与字典值中存储为列表的项进行匹配。
我有以下列表:
new_list = ['apple', 'banana', 'orange']
和以下字典:
new_dict = {abc: ['apple', 'kiwi'], bca: ['strawberry', 'banana', 'mango'], dcf: ['watermelon', 'apple', 'starfruit']}
我要做的是将new_list中的项目与字典值列表中的项目进行匹配。
这是我的代码的样子:
final_list = []
for k,v in new_dict.items():
for values in v:
for items in new_list:
if items in values:
print k
print items
我相信上面的代码在计算上很繁琐。同样,当上面的代码确实提供了一些结果时,它仅将列表项与值列表中的第一个索引匹配。例如,即使列表项“香蕉”位于第二个键:值对中,但它与之不匹配。有没有办法匹配值列表中的每个项目?
答案 0 :(得分:0)
for循环太多。
new_dict.items()
返回密钥和所述密钥的值,因此您不需要遍历v
for k, v in new_dict.items():
for items in new_list:
if items in v:
print items, k
输出:
apple abc
banana bca
apple def
>>>
这在计算上并不繁琐,您将需要遍历new_list
,并且需要检查item
中的new_list
是否在v
中。
明智的选择是,您可能希望对字典中的值进行排序,以便检查if items in v
所需的比较次数更少,但是我怀疑您会发现速度有任何显着提高。最好的方法是对您所做的一切都拥有一个良好而高效的结构。
话虽这么说,我对优化还不是很陌生,所以请带上一小撮盐。
最后:
new_dict = {'abc': ['apple', 'kiwi'], 'bca': ['strawberry', 'banana', 'mango'], 'def': ['watermelon', 'apple', 'starfruit']}
(语法)
答案 1 :(得分:0)
您可以将new_list
转换为集合,以提高查询效率:
new_set = set(new_list)
for k, v in new_dict.items():
for item in v:
if item in new_set:
print(k, item)
所以给定:
new_list = ['apple', 'banana', 'orange']
new_dict = {'abc': ['apple', 'kiwi'], 'bca': ['strawberry', 'banana', 'mango'], 'dcf': ['watermelon', 'apple', 'starfruit']}
此输出:
abc apple
bca banana
dcf apple