我有一个要迭代的字典列表。每个词典具有相同的键集。我希望能够将列表中的每个项目附加到新的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'},
]
答案 0 :(得分:1)
同意@Selcuk's comment,所以我将改写字典:
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)
是:
{'Dis': [{'house': 'Dis', 'card_title': 'Bob'}], 'Brobnar': [{'house': 'Brobnar', 'card_title': 'Fred'}]}
答案 1 :(得分:0)
如果您已经分配了变量并且只想追加到变量,则需要创建一个包装器字典以指向它们:
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'}]