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

2024-05-20 08:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,里面有值的列表和一个列表:

dict1={'first':['hi','nice'], 'second':['night','moon']}
list1= [ 'nice','moon','hi']

我想将字典中的值与列表1进行比较,如果每个键的值出现在列表中,则为键创建一个计数器: 输出应如下所示:

   first 2
   second 1

这是我的密码:

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)

有什么帮助吗?提前谢谢


Tags: in列表for字典counthiitemdict
3条回答

你可以使用以下听写理解:

{k: sum(1 for i in l if i in list1) for k, l in dict1.items()}

根据您的示例输入,返回:

{'first': 2, 'second': 1}

我将从list1中生成一个set,用于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}

intersection接受任何iterable参数,因此不需要从dict1的值创建集。你知道吗

使用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})

相关问题 更多 >