Python - как добавить в словарь, где имя словаря является переменной - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть список словарей, которые я перебираю.Каждый из словарей имеет одинаковый набор ключей.Я хочу иметь возможность добавлять каждый элемент в списке к новому набору из 7 словарей, где каждый из 7 словарей является элементом определенного ключа.

Например, если словари в списке имеют ключ с именем 'Houses 'со значениями' Dis ',' Brobnar ', я хочу иметь словари' Dis 'и' Brobnar ', которые будут содержать весь словарь.

Вот то, что я пробовал, но не получается с сообщением об ошибке -

cards = [
{'house':'Dis','card_title':'Bob'},
{'house':'Brobnar','card_title':'Fred'},
]

Dis = {}
for i in cards:
    if i['house'] == 'Dis':
        i['house'].append(i)

ошибка

i['house'].append(i)
AttributeError: 'str' object has no attribute 'append'

требуемые результаты

Dis = [
{'house':'Dis','card_title':'Bob'},
]
Brobnar = [
{'house':'Brobnar','card_title':'Fred'},
]

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

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

cards = [
{'house':'Dis','card_title':'Bob'},
{'house':'Brobnar','card_title':'Fred'},
]

Dis = []
Brobnar = []

wrapper = {
    'Dis':Dis,
    'Brobnar':Brobnar,
}

for i in cards:
    if not wrapper.get(i['house'], None) is None:
        wrapper[i['house']].append(i)

print( Dis)
print( Brobnar)

#[{'house': 'Dis', 'card_title': 'Bob'}]
#[{'house': 'Brobnar', 'card_title': 'Fred'}]
0 голосов
/ 07 декабря 2018

Согласен с @ комментарием Сельчука , поэтому я собираюсь сделать словарь вместо:

d={}.fromkeys([i['house'] for i in cards],[])
d={k:[i for i in cards if i['house']==k] for k,v in d.items()}

А теперь:

print(d)

Is:

{'Dis': [{'house': 'Dis', 'card_title': 'Bob'}], 'Brobnar': [{'house': 'Brobnar', 'card_title': 'Fred'}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...