是否可以从一个列表中获取多个值并将它们存储到两个不同的列表中,并在一行中进行一次迭代?
Is it possible to get multiple values from a list and store them into two different lists with one iteration in one line?
我想弄清楚是否可以将列表中的一组值或 dict.values()
解压缩到一行中的多个不同列表中,这可能吗?假设我的字典有这样的格式 {key : [x,y]}
这意味着值字段是一个列表。
例如,我知道我可以这样做:
list1 = [ i[1] for i in dict.values()]
有没有办法做这样的事情:
list1,list2 = [i[0],i[1] for i in dict.values()]
并将一个值存储到 list1
,将另一个值存储到 list2
这有可能发生吗?我喜欢它作为一个想法,简短而优雅的一次迭代完成。
P.S。我知道如何使用多行 for 循环来做到这一点,但我只是好奇!
使用zip
:
d = {1: [1, 2], 3: [4, 67]}
list_1, list_2 = zip(*d.values())
得到
(1, 4)
list_1
,(2, 67)
list_2
。但它们是元组;如果你想要列表,那么 map
所以:
list_1, list_2 = map(list, zip(*d.values()))
*d.values()
解压字典中的列表值。然后 zip
以并行方式从每个列表中取出一个元素来为您提供元组。
我想弄清楚是否可以将列表中的一组值或 dict.values()
解压缩到一行中的多个不同列表中,这可能吗?假设我的字典有这样的格式 {key : [x,y]}
这意味着值字段是一个列表。
例如,我知道我可以这样做:
list1 = [ i[1] for i in dict.values()]
有没有办法做这样的事情:
list1,list2 = [i[0],i[1] for i in dict.values()]
并将一个值存储到 list1
,将另一个值存储到 list2
这有可能发生吗?我喜欢它作为一个想法,简短而优雅的一次迭代完成。
P.S。我知道如何使用多行 for 循环来做到这一点,但我只是好奇!
使用zip
:
d = {1: [1, 2], 3: [4, 67]}
list_1, list_2 = zip(*d.values())
得到
(1, 4)
list_1
,(2, 67)
list_2
。但它们是元组;如果你想要列表,那么 map
所以:
list_1, list_2 = map(list, zip(*d.values()))
*d.values()
解压字典中的列表值。然后 zip
以并行方式从每个列表中取出一个元素来为您提供元组。