給出一個列表:轉換列表字典蟒蛇
source = [{'A':123},{'B':234},{'C':345}]
我需要從該列表的字典格式:
newDict = {'A':123,'B':234,'C':345}
什麼是完成這一任務的語法乾淨的方式?
給出一個列表:轉換列表字典蟒蛇
source = [{'A':123},{'B':234},{'C':345}]
我需要從該列表的字典格式:
newDict = {'A':123,'B':234,'C':345}
什麼是完成這一任務的語法乾淨的方式?
使用的字典 - 理解:
>>> l = [{'A':123},{'B':234},{'C':345}]
>>> d = {k: v for dct in l for k, v in dct.items()}
>>> d
{'A': 123, 'B': 234, 'C': 345}
但是它可能意見爲基礎,如果是這樣的「語法乾淨的方式」,但我喜歡它。
如果你經常使用它,你可能希望定義一個merge
功能,然後你就可以傳遞給reduce
:
from functools import reduce # Needed for Python3
source = [{'A':123},{'B':234},{'C':345}]
def merge(a,b):
d = a.copy()
d.update(b)
return d
print(reduce(merge, source))
#=> {'A': 123, 'C': 345, 'B': 234}
這裏有一個額外的方法,在這裏提供給你的Python如何實現一個味道該功能編程技術通過reduce()
功能被稱爲reduction。在Python 3中,reduce()
is in the functools package。在Python 2中,reduce()
is a built-in function。我使用Python 3在下面的例子:
from functools import reduce # don't import if you are using Python 2
def updater(dict_orig, dict_add):
dict_orig.update(dict_add)
return dict_orig
new_dict = reduce(updater, l, dict())
的第一個參數reduce()
是在迭代操作的功能,第二個是可迭代本身(列表l
),第三個是可選的初始化對象放在list
的開頭減少。
減少的每一步都需要一個對象進行操作:即上一步的結果。但dict.update()
不會返回任何內容,因此我們需要上面的updater()
函數,它執行更新,然後返回正在更新的dict
,從而爲下一步提供所需的對象。如果dict.update()
沒有返回值,那麼這將全部是單線。
因爲dict.update()
直接作用於原dict
,我們需要一個可選的空dict()
初始化對象開出減少 - 在原始l
名單沒有它,首先dict
將被修改。
由於所有這些原因,我喜歡@ MSeifert的dict-comprehension方法好得多,但無論如何我只是爲了說明Python的縮減而發佈了這個方法。
可能的重複[將列表轉換爲Python中的字典](http://stackoverflow.com/questions/4576115/convert-a-list-to-a-dictionary-in-python) –
當然不是最「語法上乾淨」的方式,但有點樂趣:'reduce(lambda d,cur:d.update(cur)or d,source,{})' – miradulo
如果你有一個列表'[{'A':123}, {'A':456}]'?如果結果是'{'A':123}'或'{'A':456}'? –