Измените по умолчанию диктовку на вложенный словарь - PullRequest
0 голосов
/ 18 октября 2018

У меня есть словарь (показанный ниже), значения являются словарями по умолчанию с внутренним значением, являющимся списком.Я пытаюсь превратить этот словарь в другой словарь с тем же ключом более высокого уровня и вложенным словарем, который содержит тот же внутренний ключ и сумму значений «4» в списке.

Например, ожидаемый вывод для первой записи: {'google': {'dog': 1, 'cat': 2}}

{'google': defaultdict(<type 'list'>, {'dog': [4, 0], 'cat': [4, 4, 0]}), 'ibm': defaultdict(<type 'list'>, {'dog': [4], 'bird': [0]}), 'kaspersky': defaultdict(<type 'list'>, {}), 'amazon': defaultdict(<type 'list'>, {}), 'facebook': defaultdict(<type 'list'>, {}), 'sony': defaultdict(<type 'list'>, {}), 'microsoft': defaultdict(<type 'list'>, {}), 'apple': defaultdict(<type 'list'>, {})}

Я использую кодниже, чтобы попытаться сделать это, но я получаю сообщение об ошибке «Ошибка типа: индексы списка должны быть целыми числами, а не str».

def swords_neg(dictionary):
    for key,value in dictionary.iteritems():
        company_sent_dict_three[key] = []
        for i,j in dict(value).iteritems():
            for sent in j:
                company_sent_dict_three[key][i] += sent

    print company_sent_dict_three

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете использовать следующие вложенные истолкование слов :

{
    k: {k_: sum(x==4 for x in v_) for k_, v_ in v.items()} 
    for k, v in dictionary.items()
}
# {'google': {'dog': 1, 'cat': 2}, 
#  'ibm': {'dog': 1, 'bird': 0}, 
#  'kaspersky': {}, 
#  'amazon': {}, 
#  'facebook': {}, 
#  'sony': {}, 
#  'microsoft': {}, 
#  'apple': {}}

k, v - это пары ключ-значение внешнего dict, k_, v_ - это ключ-пары значений каждого внутреннего defaultdict.sum - это удобный способ подсчета вхождений 4 для каждого внутреннего списка с помощью sum(x==4 for x in v_).

...