从列表创建列表字典
Create a dict of lists from lists
我可以通过 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]
}
我没有收到任何错误,只是不是我认为应该得到的输出。
您需要将密钥列表与值一起压缩:
def turn_to_dict(lst, *args):
return {k: v for k, v in zip(lst, args)}
这会将 lst
中的元素与 args
中的每个列表配对。
并不是说你在这里根本不需要使用字典理解,dict()
直接接受键值对的迭代:
return dict(zip(lst, args))
如果 key
或 value
表达式不仅仅是对双值元组的第一个和第二个元素的引用,则只需要字典理解。
演示:
>>> 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]}
你不需要这一切:
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]}
我可以通过 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]
}
我没有收到任何错误,只是不是我认为应该得到的输出。
您需要将密钥列表与值一起压缩:
def turn_to_dict(lst, *args):
return {k: v for k, v in zip(lst, args)}
这会将 lst
中的元素与 args
中的每个列表配对。
并不是说你在这里根本不需要使用字典理解,dict()
直接接受键值对的迭代:
return dict(zip(lst, args))
如果 key
或 value
表达式不仅仅是对双值元组的第一个和第二个元素的引用,则只需要字典理解。
演示:
>>> 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]}
你不需要这一切:
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]}