如何将字典值列表项与存储在单独列表中的项进行匹配?

时间:2019-05-03 20:02:23

标签: python python-2.7

我正在尝试将列表项与字典值中存储为列表的项进行匹配。

我有以下列表:

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

我相信上面的代码在计算上很繁琐。同样,当上面的代码确实提供了一些结果时,它仅将列表项与值列表中的第一个索引匹配。例如,即使列表项“香蕉”位于第二个键:值对中,但它与之不匹配。有没有办法匹配值列表中的每个项目?

2 个答案:

答案 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