将列表与字典中的值进行比较

You*_*Gad 7 python dictionary list python-3.x

我有一个包含值列表和列表的字典:

dict1={'first':['hi','nice'], 'second':['night','moon']}
list1= [ 'nice','moon','hi']
Run Code Online (Sandbox Code Playgroud)

我想将字典中的值与list1进行比较,如果每个键的值出现在列表中,则为键创建一个计数器:输出应该是这样的:

   first 2
   second 1
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

count = 0 
for list_item in list1: 
    for dict_v in dict1.values():
      if list_item.split() == dict_v:
        count+= 1
        print(dict.keys,count)
Run Code Online (Sandbox Code Playgroud)

任何帮助?提前致谢

tim*_*geb 7

我会做一个setlist1了O(1)查找时间和访问intersection方法.然后运用词典理解.

>>> dict1={'first':['hi','nice'], 'second':['night','moon']}
>>> list1= [ 'nice','moon','hi']
>>> 
>>> set1 = set(list1)
>>> {k:len(set1.intersection(v)) for k, v in dict1.items()}
{'first': 2, 'second': 1}
Run Code Online (Sandbox Code Playgroud)

intersection接受任何可迭代的参数,因此dict1不需要从值创建集合.


vas*_*ede 0

使用collections.Counter

from collections import Counter

c = Counter(k for k in dict1 for i in list1 if i in dict1[k])
# Counter({'first': 2, 'second': 1})
Run Code Online (Sandbox Code Playgroud)