我有2个列表,我想将它们合并为词典列表。 我的代码:
import pprint
list1 = [1, 2, 3, 4]
list2 = [0, 1, 1, 2]
newlist = []
for i in range(0, len(list1)):
newdict = {}
newdict["original"] = list1[i]
newdict["updated"] = list2[i]
newlist.append(newdict)
pprint.pprint(newlist)
输出:
[{'original': 1, 'updated': 0},
{'original': 2, 'updated': 1},
{'original': 3, 'updated': 1},
{'original': 4, 'updated': 2}]
有更好或更快的方法吗?
答案 0 :(得分:12)
您可以zip两个列表,然后使用列表推导,您可以在列表中为每个项目创建字典:
list1=[1,2,3,4]
list2=[0,1,1,2]
new_list = [{'original': v1, 'updated': v2} for v1, v2 in zip(list1, list2)]
print(new_list)
输出:
[{'updated': 0, 'original': 1}, {'updated': 1, 'original': 2}, {'updated': 1, 'original': 3}, {'updated': 2, 'original': 4}]
答案 1 :(得分:0)
您还可以使用列表推导在每个索引上迭代两个列表。因此,如果list1大于list2,这将抛出索引错误。有人知道拉链是否更快?
newlist = [{"original":list1[i],"updated":list2[i]} for i in range(len(list1))]
答案 2 :(得分:0)
idjaw提供的答案以非常Pythonic的方式钉它。有一种使用命名元组的替代方法:
from collections import namedtuple
from itertools import izip
ListCompare = namedtuple('ListCompare', ['original', 'updated'])
L1 = [1,2,3,4]
L2 = [0,1,1,2]
comp = [ListCompare(a, b) for a,b in izip(L1, L2)]
print comp[1].original, comp[1].updated
2 1
如果列表很长,则命名元组应该比字典表现更好(即开销更少)。虽然我提到这个鲜为人知的替代方案。 请注意,此代码适用于Python 2.7,对于Python 3,必须进行微调。