如何创建具有相同键的字典列表?

5

假设我有以下三个列表:

list_1 = [1, 2, 3, 4, 5]           # five ints
list_2 = ['a', 'b', 'c', 'd', 'e'] # five strs
list_3 = [1.1, 2.2, 3.3, 4.4, 5.5] # five floats

如何将这三个列表合并成一个:
[
    {'int': 1, 'str': 'a', 'float': 1.1}, 
    {'int': 2, 'str': 'b', 'float': 2.2}, 
    {'int': 3, 'str': 'c', 'float': 3.3}, 
    {'int': 4, 'str': 'd', 'float': 4.4}, 
    {'int': 5, 'str': 'e', 'float': 5.5}
]

这个问题怎么用最简洁的语法实现?
非常感谢你的任何帮助!!
3个回答

17
dct = [{'int':a,'str':b,'float':c}  for a,b,c in zip(list_1,list_2,list_3)]

9

尝试使用zip()

zip()会迭代遍历[(1, 'a', 1.1), (2, 'b', 2.2), (3, 'c', 3.3), (4, 'd', 4.4), (5, 'e', 5.5)],并将其与键["int", "str", "float"]配对,创建一个包含字典的列表。

compact

dictList = [{k:v for k,v in zip(['int','str','float'],pair)} for pair in zip(list_1,list_2,list_3)]

易于人类阅读

dictList = []
for pair in zip(list_1,list_2,list_3):
    dicts1 = {}
    for k,v in zip(['int','str','float'],pair):
        dicts1[k] = v
    dictList.append(dicts1)

有点硬编码

dictList = [{'int':x,'str':y,'float':z} for x,y,z in zip(list_1,list_2,list_3)]

输出

[
    {'int': 1, 'str': 'a', 'float': 1.1}, 
    {'int': 2, 'str': 'b', 'float': 2.2}, 
    {'int': 3, 'str': 'c', 'float': 3.3}, 
    {'int': 4, 'str': 'd', 'float': 4.4}, 
    {'int': 5, 'str': 'e', 'float': 5.5}
]

4

这与@Tim Roberts的解决方案类似,但允许任意类型。

[dict(((type(x).__name__,x) for x in (a,b,c))) for a,b,c in zip(list_1,list_2,list_3)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接