给出一个列表:转换列表字典蟒蛇
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}'? –