【问题标题】:Is it possible to get multiple values from a list and store them into two different lists with one iteration in one line?是否可以从一个列表中获取多个值并将它们存储到两个不同的列表中,并在一行中进行一次迭代?
【发布时间】:2021-04-11 19:15:37
【问题描述】:

我想知道您是否可以将列表或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

这甚至可能发生吗?我喜欢它作为一个想法,简短而优雅的一次迭代完成。

附:我知道如何使用多行 for 循环来做到这一点,但我只是好奇!

【问题讨论】:

    标签: python list dictionary key-value-store


    【解决方案1】:

    使用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 以并行方式从每个列表中获取一个元素,为您提供元组。

    【讨论】:

    • 感谢@Mustafa Aydin 的回答!我现在就去试试 :) 干杯!
    • 如果您只需要每个列表中的值的子集,例如 d = {1: [1, 2,3], 3: [4, 67,77]},我想添加什么得到 [1,4] 和 [3,77]?
    • @TassosK 您仍然可以使用相同的代码,但它会给您返回 3 个列表。在您的示例中,您可以执行 list_1, _, list_3 = map(...) 并拥有它们。但是如果你想要它是通用的,那么lists = list(map(...)) 然后按照你的意愿获取子集,例如list_5 = lists[4]list_10 = lists[9]。在后一种通用子集情况下,我认为不可能有一条线。
    • 非常感谢,@Mustafa Aydin!这正是我的想法!兄弟别闹!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多