2017-10-10 97 views
0

我可以通过枚举创建列表的字典()如下:创建列表,从列表中的字典

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] 
} 

我没有得到任何错误,只是没有输出,我想我应该得到。

回答

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

你不需要这一切:

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]}