Как вернуть список частот для определенного значения в dict - PullRequest
0 голосов
/ 01 ноября 2018

Итак, у меня есть 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 голосов
/ 01 ноября 2018

Примерно так должно получиться:

>>> from collections import Counter
>>> counts = Counter([item for sublist in your_dict.values() for item in sublist])
0 голосов
/ 01 ноября 2018

Если вы не хотите импортировать какие-либо библиотеки, вы можете сделать следующее:

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'. Если это так, вы добавляете его значение на единицу. Если это не так, то вы добавляете значение в качестве ключа и определяете его значение как единое. :)

0 голосов
/ 01 ноября 2018

Вы можете снять вложенные значения и применить 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...