将列表转换为dict python

时间:2017-03-02 14:35:09

标签: python dictionary

给出一个清单:

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

我需要这个列表中的dict格式为:

newDict  = {'A':123,'B':234,'C':345}

完成此任务的语法最干净的方法是什么?

3 个答案:

答案 0 :(得分:6)

使用字典理解:

>>> 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}

然而,如果这是语法上最干净的方式,那么它可能是基于意见的。"但我喜欢它。

答案 1 :(得分:1)

这里提供了另一种方法,通过reduce()函数为您提供Python如何实现名为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()的第一个参数是对iterable进行操作的函数,第二个参数是iterable本身(你的列表l),第三个参数是可选的初始化对象。 list减少。

缩小的每个步骤都需要对象进行操作:即前一步骤的结果。但是dict.update()没有返回任何内容,因此我们需要上面的updater()函数,它执行更新,然后返回正在更新的dict,从而为下一步提供所需的对象。如果不是dict.update()没有返回值,这将是一个单行。

由于dict.update()直接在原始dict上运行,我们需要可选的空dict()初始值设定项对象来开始缩减 - 没有它,您的第一个dict原始l列表将被修改。

出于所有这些原因,我更喜欢@ MSeifert的dict-comprehension方法,但我发布这个只是为了说明你的Python减少。

答案 2 :(得分:0)

如果您经常使用它,您可能需要定义一个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}