簡體   English   中英

將列表轉換為dict python

[英]Converting list to dict python

給出一個清單:

source = [{'A':123},{'B':234},{'C':345}]

我需要這個列表中的dict格式:

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}

然而,如果這是“語法上最干凈的方式”,它可能是基於意見的,但我喜歡它。

這里有一個額外的方法,在這里提供給你的Python如何實現所謂的函數式編程技術中的香味降低 ,通過reduce()函數。 在Python 3中, reduce()位於functools包中 在Python 2中, reduce()是一個內置函數 我在下面的例子中使用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()的第一個參數是對iterable進行操作的函數,第二個參數是iterable本身(你的列表l ),第三個是可選的初始化對象放在list的開頭以減少。

減少的每個步驟都需要對象進行操作:即前一步驟的結果。 但是dict.update()不會返回任何內容,因此我們需要上面的updater()函數,它執行更新然后返回正在更新的dict ,從而為下一步提供所需的對象。 如果沒有dict.update()沒有返回值,這將是一個單行。

因為dict.update()直接在原始dict ,所以我們需要可選的空dict()初始化器對象來開始減少 - 沒有它,原始l列表中的第一個dict將被修改。

出於所有這些原因,我更喜歡@ MSeifert的dict-comprehension方法,但無論如何我發布這個只是為了說明Python減少。

如果經常使用它,您可能需要定義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}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM