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

Emm*_*coe 5 python dictionary list

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

function_name({'key1':['apple', 'orange'], 'key2':['orange', 'pear'})
>>> {'apple':1, 'orange':2, 'pear':1}
Run Code Online (Sandbox Code Playgroud)

我该如何创建这个功能?我想以某种方式制作一个像这样的for循环:

count = 0
for fruit in dict_name:
    if food == 'apple'
        count = count + fruit
Run Code Online (Sandbox Code Playgroud)

我仍然不确定如何格式化这个特别是如何计算值并收集它们,提前感谢任何建议!

tim*_*geb 7

您可以取消嵌套字典的值并应用a 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})
Run Code Online (Sandbox Code Playgroud)

如果你不喜欢嵌套的生成器理解,可以使用un-nesting itertools.chain.from_iterable.

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

没有导入和传统循环,它看起来像这样:

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