python-如何在字典名称为变量的情况下追加到字典

时间:2018-12-07 00:01:22

标签: python dictionary

我有一个要迭代的字典列表。每个词典具有相同的键集。我希望能够将列表中的每个项目附加到新的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 :(得分: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'}]