如何返回dict中某个值的频率列表



所以我有一个dict,它包含与列表相对应的键,其中包含str。我想收集所述列表中所有相同的值,并将它们相加。也许我的解释令人困惑,所以我将举一个例子:

function_name({'key1':['apple', 'orange'], 'key2':['orange', 'pear'})
>>> {'apple':1, 'orange':2, 'pear':1}

我将如何创建此函数?我想以某种方式制作一个这样的for循环:

count = 0
for fruit in dict_name:
if food == 'apple'
count = count + fruit

我仍然不确定如何格式化,尤其是如何计算值并收集它们,提前感谢您的任何建议!

您可以取消嵌套dict的值并应用Counter

>>> from collections import Counter
>>> 
>>> d = {'key1':['apple', 'orange'], 'key2':['orange', 'pear']}
>>> Counter(v for sub in d.values() for v in sub)
Counter({'apple': 1, 'orange': 2, 'pear': 1})

如果你不喜欢嵌套生成器的理解,可以用itertools.chain.from_iterable来完成取消嵌套。

>>> from itertools import chain
>>> Counter(chain.from_iterable(d.values()))
Counter({'apple': 1, 'orange': 2, 'pear': 1})

如果没有进口和传统的循环,它看起来是这样的:

>>> result = {}
>>> for sub in d.values():
...:    for v in sub:
...:        result[v] = result.get(v, 0) + 1
...:        
>>> result
{'apple': 1, 'orange': 2, 'pear': 1}

像这样的东西应该可以做到:

>>> from collections import Counter
>>> counts = Counter([item for sublist in your_dict.values() for item in sublist])

如果您不想导入任何库,可以执行以下操作:

function_name = {'key1':['apple', 'orange'], 'key2':['orange', 'pear']}
foobar = {}
for key, value in function_name.items():
for element in value:
if element in foobar:
foobar[element] += 1
else:
foobar[element] = 1
print(foobar)

您检查该值是否已在创建的dict"foobar"中。如果是,则将其值加一。如果不是,则将该值添加为键,并将其值定义为键。:(

最新更新