2013-05-27 73 views
1

我有以下結構合併:使用擴展功能追加/ Python中

[ 
    { 
    u'123456': {'name': "Bill"}, 
    u'234567': {'name': "Dave"}, 
    u'345678': {'name': "Tom"} 
    }, 
] 

在for循環新項目添加到列表中。不幸的是這會導致以下結構:

[ 
     { 
     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

是的,兩者都是可能的,因爲列表和字典都是可變的。 –

+0

爲什麼你在列表中有這個,而不僅僅是一個字典。如果你總是更新字典,它是列表中唯一的元素,將它放入列表是沒有意義的。 – TobiMarg

+0

,因爲我想在構建它之後按列對它進行排序。這可能只是一個字典? (即時通訊非常新的python) –

回答

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

如果您目前有這樣的事情:

mylist.extend(newdict) 

你應該使用這樣的:

mylist[0].update(newdict) 
0

你可以DD兩個字典的物品放在一起:

>>> 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) 
+0

這是一個迂迴的方式來做到這一點 - 「dict.update」它在原地。 – RichieHindle

+0

@RichieHindle是的,我只是想補充一點 – TerryA

0

您可以使用.update(),但是這將覆蓋值,如果你有重複鍵。

def flatten(results): 
    newresult = {} 
    for subdict : results: 
     newresult.update(subdict) 
    return [newresult]