从列表中创建列表的字典

时间:2017-10-10 13:09:46

标签: python python-3.6 dictionary-comprehension

我可以通过enumerate()创建一个列表,如下所示:

def turn_to_dict(*args):
    return {i: v for i, v in enumerate(args)}


lst1 = [1, 2, 3, 4]
lst2 = [3, 4, 6, 7]
lst3 = [5, 8, 9]


x = turn_to_dict(lst1, lst2, lst3)

print(x)

输出:

{0: [1, 2, 3, 4], 
 1: [3, 4, 6, 7], 
 2: [5, 8, 9]
 }

我想要一个改变同样的事情:我希望键是列表的元素:

lst1 = ['a', 'b', 'c']
lst2 = [1, 2, 3, 4]
lst3 = [3, 4, 6, 7]
lst4 = [5, 8, 9]


def turn_to_dict(lst, *args):
    for k in lst:
        return {k: v for v in args}


x = turn_to_dict(lst1, lst2, lst3, lst4)

print(x)

我得到了:

{'a': [5, 8, 9]}

我想要的是:

{a: [1, 2, 3, 4], 
 b: [3, 4, 6, 7], 
 c: [5, 8, 9]
 } 

我没有错误,只是没有我认为应该得到的输出。

2 个答案:

答案 0 :(得分:1)

您需要将键列表与值一起压缩:

def turn_to_dict(lst, *args):
    return {k: v for k, v in zip(lst, args)}

这会将lst中的元素与args中的每个列表配对。

这里并不需要使用词典理解,dict()直接接受可迭代的键值对:

return dict(zip(lst, args))

如果keyvalue表达式不仅仅是对2值元组的第一个和第二个元素的引用,那么您只需要字典理解。

演示:

>>> lst1 = ['a', 'b', 'c']
>>> lst2 = [1, 2, 3, 4]
>>> lst3 = [3, 4, 6, 7]
>>> lst4 = [5, 8, 9]
>>> args = (lst2, lst3, lst4)
>>> {k: v for k, v in zip(lst1, args)}
{'a': [1, 2, 3, 4], 'b': [3, 4, 6, 7], 'c': [5, 8, 9]}
>>> dict(zip(lst1, args))
{'a': [1, 2, 3, 4], 'b': [3, 4, 6, 7], 'c': [5, 8, 9]}

答案 1 :(得分:1)

你不需要这一切:

dict(zip(lst1, [lst2,lst3, lst4]))

使用功能:

def turn_to_dict(lst, *args):
    return dict(zip(lst, args))

在:

lst1 = ['a', 'b', 'c']
lst2 = [1, 2, 3, 4]
lst3 = [3, 4, 6, 7]
lst4 = [5, 8, 9]

输出:

>>> turn_to_dict(lst1,lst2,lst3,lst4)
{'a': [1, 2, 3, 4], 'c': [5, 8, 9], 'b': [3, 4, 6, 7]}