如何在字典中返回特定值的频率列表

时间:2018-11-01 19:16:32

标签: python list dictionary

所以我有一个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

我仍然不确定如何设置此格式,尤其是如何计算值并收集它们,在此先感谢您的任何建议!

3 个答案:

答案 0 :(得分:7)

您可以取消嵌套字典的值并应用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}

答案 1 :(得分:2)

类似这样的事情应该可以解决:

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

答案 2 :(得分:1)

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

$('select[name="Deliveryaddress\\.Country"]').change(function() {
  $('#deliveryaddress\\.Phone').val(this.value);
})

$('#deliveryaddress\\.Phone').val($('select[name="Deliveryaddress\\.Country"]').val())

您检查该值是否已在创建的字典'foobar'中。如果是,则将其值加一。如果不是,则将值添加为键并将其值定义为1。 :)