从两个嵌套列表制作字典

Making a dictionary from two nested lists

我想使用列表理解从两个嵌套列表中创建一个字典列表。我尝试了不同的技术,但没有用。

a = [ ['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'] ]
b = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]

想要的结果是

c = [ {'a':1, 'b':2, 'c':3}, {'d':4, 'e':5, 'f':6}, {'g':7, 'h':8, 'i':9} ]

我最后尝试的是

c = [dict(zip(a,b)) for list1, list2 in zip(a,b) for letter, number in zip(list1,list2)]

您需要同时遍历两个列表,您可以通过 zipping 一起然后 zipping 每个列表并将其传输到 dict 来实现。

你可以通过使用这个 oneliner 来实现


a = [ ['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'] ]
b = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]

c = [dict(zip(l1, l2)) for l1, l2 in zip(a, b)]

# [{'a': 1, 'b': 2, 'c': 3}, {'d': 4, 'e': 5, 'f': 6}, {'g': 7, 'h': 8, 'i': 9}]

当您 zip ab 时,它会创建一个可迭代的元组:

out = list(zip(a, b))

[(['a', 'b', 'c'], [1, 2, 3]),
 (['d', 'e', 'f'], [4, 5, 6]),
 (['g', 'h', 'i'], [7, 8, 9])]

现在,如果您查看上面的列表,应该清楚每对列表都是您想要的结果中字典的键和值。所以很自然地,我们应该 zip 每对:

for sublist1, sublist2 in zip(a,b):
    print(list(zip(sublist1, sublist2)))
    
[('a', 1), ('b', 2), ('c', 3)]
[('d', 4), ('e', 5), ('f', 6)]
[('g', 7), ('h', 8), ('i', 9)]

以上结果表明每个元组在所需字典中是 key-value 对。

所以我们可以使用 dict 构造函数而不是打印它们:

out = [dict(zip(sublist1, sublist2)) for sublist1, sublist2 in zip(a, b)]

输出:

[{'a': 1, 'b': 2, 'c': 3}, {'d': 4, 'e': 5, 'f': 6}, {'g': 7, 'h': 8, 'i': 9}]