我有一个列表列表,如下所示。
a = [['A','B','C','D'],['1','2','3','4'],['5','6','7','8']]
我需要下面的字典列表。
b=[{'A': '1', 'B': '2', 'C': '3', 'D': '4'},
{'A': '5', 'B': '6', 'C': '7', 'D': '8'}]
我该如何实现? 谢谢
答案 0 :(得分:4)
d = [dict(zip(a[0], e)) for e in a[1:]]
说明:
有一个列表a
,其中所有项目都是其自身长度相等的列表,您希望从第一项与列表a
的任何其他项目的每种组合构建字典。
a = [['A', 'B', 'C', 'D'], ['1', '2', '3', '4'], ['5', '6', '7', '8']]
首先将a
转换为所有此类组合的列表。
step1 = [a[0], e for e in a[1:]]
# [(['A', 'B', 'C', 'D'], ['1', '2', '3', '4']),
# (['A', 'B', 'C', 'D'], ['5', '6', '7', '8'])]
这些组合中的每一个(两个列表的元组)现在都将转换成键-值对列表,其中键来自第一个列表,键来自第二个列表。这正是zip的作用。
['A', 'B', ...], ['1', '2', ...] --zip--> [('A', '1'), ('B', '2'), ...
最后,这些列表中的每一个都可以简单地转换为字典。
d = [dict(zip(a[0], e)) for e in a[1:]]
答案 1 :(得分:1)
zip()
函数返回一个zip对象,它是一个元组的迭代器,其中每个传递的迭代器中的第一项配对在一起,然后每个传递的迭代器中的第二项配对在一起,等等。
借助列表理解功能,您可以遍历列表中的所有子列表,使用第一个列表和所有其他列表进行压缩
还使用dict()
将zip元素转换为字典
a =[['A','B','C','D'],['1','2','3','4'],['5','6','7','8']]
r = [ dict(zip(a[0],a[i])) for i in range(1,len(a))]
print (r)
输出:
[{'A': '1', 'B': '2', 'C': '3', 'D': '4'}, {'A': '5', 'B': '6', 'C': '7', 'D': '8'}]
答案 2 :(得分:0)
以下代码在我的电脑上工作正常。
a = [['A','B','C','D'],['1','2','3','4'],['5','6','7','8']]
b = [dict(zip(a[0], a[1])), dict(zip(a[0], a[2]))]
print(b)
问题如问题中所述。 Raphael使用理解力提供了最佳解决方案,它非常紧凑且功能强大,可以在一般情况下使用。
我的解决方案只是试图展示在很小的情况下无需列表理解即可完成的工作,这很简单。
使用zip
函数,您可以合并列表中的每个元素。然后使用dict
函数将其转换为字典。如果列表很多,此代码将不会很有用,因为您必须专门键入每个列表。但这是了解幕后情况的良好起点。
最后,我print
按照预期检查结果。
我得到的结果是:
In [1]: [{'A': '1', 'B': '2', 'C': '3', 'D': '4'}, {'A': '5', 'B': '6', 'C': '7', 'D': '8'}]