我有以下结构:
[
{
u'123456': {'name': "Bill"},
u'234567': {'name': "Dave"},
u'345678': {'name': "Tom"}
},
]
在for循环期间,使用extend函数将新项目添加到列表中。不幸的是,这导致以下结构:
[
{
u'123456': {'name': "Bill"},
u'234567': {'name': "Dave"},
u'345678': {'name': "Tom"}
},
{
u'555555': {'name': "Steve"},
u'666666': {'name': "Michael"},
u'777777': {'name': "George"}
}
]
预期结果实际上是一种扁平结构,如下所示:
[
{
u'123456': {'name': "Bill"},
u'234567': {'name': "Dave"},
u'345678': {'name': "Tom"},
u'555555': {'name': "Steve"},
u'666666': {'name': "Michael"},
u'777777': {'name': "George"}
}
]
是否可以附加到列表中,以便以平面方式构建结构。
或
循环结束后是否可以展平?
答案 0 :(得分:2)
如果您的列表名为l
,则可以使用l[0].update(new_dict)
。
例如:
l = [{u'123456': {'name': "Bill"}}]
l[0].update({u'234567': {'name': "Dave"}})
print(l)
尼斯格式化输出是:
[
{
u'123456': {'name': 'Bill'},
u'234567': {'name': 'Dave'}
}
]
答案 1 :(得分:1)
你现在有这样的地方:
mylist.extend(newdict)
你应该用这个:
mylist[0].update(newdict)
答案 2 :(得分:0)
您可以将两个词典的项目一起添加:
>>> mylist = [
{
u'123456': {'name': "Bill"},
u'234567': {'name': "Dave"},
u'345678': {'name': "Tom"}
},
]
>>> mydict = {
u'555555': {'name': "Steve"},
u'666666': {'name': "Michael"},
u'777777': {'name': "George"}
}
>>> [dict(mylist[0].items() + mydict.items())]
[{u'123456': {'name': 'Bill'}, u'555555': {'name': 'Steve'}, u'777777': {'name': 'George'}, u'666666': {'name': 'Michael'}, u'345678': {'name': 'Tom'}, u'234567': {'name': 'Dave'}}]
虽然只做.update()
更干净:
>>> mylist[0].update(mydict)
答案 3 :(得分:0)
您可以使用.update()
,但如果您有重复的密钥,则会覆盖值。
def flatten(results):
newresult = {}
for subdict : results:
newresult.update(subdict)
return [newresult]