【问题标题】:How to combine lists into one with sub list in python [duplicate]如何在python中将列表与子列表合并为一个[重复]
【发布时间】:2015-09-17 19:29:33
【问题描述】:

有没有一种快速简单的方法来转换列表(假设列表长度相同):

numbers = [1, 2, 3, 4]
letters = ['a', 'b', 'c', 'd']
fruits = ['orange', 'apple', 'banana', 'kiwi']

以这种形式与子列表合二为一:

list = [ [1, 'a', 'orange'], 
         [2, 'b', 'apple'], 
         [3, 'c', 'banana'], 
         [4, 'd', 'kiwi'] ]

或最终

list = [ {'number': 1, 'letter': 'a', 'fruit': 'oranges'}, 
         {'number': 2, 'letter': 'b', 'fruit': 'apple'}, 
         {'number': 3, 'letter': 'c', 'fruit': 'banana'}, 
         {'number': 4, 'letter': 'd', 'fruit': 'kiwi'} ]

或者我必须使用多个循环吗?

【问题讨论】:

  • 对于数值,使用 numpy 很容易(将是 vstack((numbers, letters, fruits)).T ),但是 numpy 没有为任意列表提供合适的解决方案 afaik。
  • @stewori 我希望你的意思是“没有合适的解决方案with numpy”。
  • 当然。我刚刚澄清了。对于数值数据,numpy-solution 应该比下面的通用答案更受欢迎。
  • 好的,谢谢。在我的真实代码中,我有数值(主要是浮点数)。
  • 为什么我的问题是重复的?主题“如何从多维数组中提取列?”没有回答我的问题...

标签: python list


【解决方案1】:

您可以使用内置的zip 函数。 对于第一个,只需将它们全部压缩在一起,然后使用 map 函数将内部元组转换为列表,然后将它们制成列表。

例子-

numbers = [1, 2, 3, 4]
letters = ['a', 'b', 'c', 'd']
fruits = ['orange', 'apple', 'banana', 'kiwi']
>>> list(map(list, zip(numbers,letters,fruits)))
[[1, 'a', 'orange'], [2, 'b', 'apple'], [3, 'c', 'banana'], [4, 'd', 'kiwi']]

请注意,对于 Python 2.x,您不需要围绕 map(..) 函数的 list(...) 函数,因为它返回 list ,但在 Python 3.x 中 map(..) 函数返回一个生成器,所以如果您需要 list ,您需要将其转换为 list 。

对于第二个,您可以使用列表推导和 zip 函数,如 -

>>> list({'number':x,'letter':y,'fruit':z} for x,y,z in zip(numbers,letters,fruits))
[{'number': 1, 'letter': 'a', 'fruit': 'orange'}, {'number': 2, 'letter': 'b', 'fruit': 'apple'}, {'number': 3, 'letter': 'c', 'fruit': 'banana'}, {'number': 4, 'letter': 'd', 'fruit': 'kiwi'}]

【讨论】:

  • 编辑好了,很高兴知道。我使用 Python 2.7。
【解决方案2】:
>>> dicts = [dict(zip(('fruit','letter','number'),vals)) for vals in zip(fruits,letters,numbers)]
>>> dicts
[{'fruit': 'orange', 'number': 1, 'letter': 'a'}, {'fruit': 'apple', 'number': 2, 'letter': 'b'}, {'fruit': 'banana', 'number': 3, 'letter': 'c'}, {'fruit': 'kiwi', 'number': 4, 'letter': 'd'}]

【讨论】:

    【解决方案3】:

    这是第一个不错的:

    >>> a = [1, 2, 3, 4]
    >>> b = ['a', 'b', 'c', 'd']
    >>> c = ['orange', 'apple', 'banana', 'kiwi']
    >>> [[x, y, z] for x, y, z in zip(a, b, c)]
    [[1, 'a', 'orange'], [2, 'b', 'apple'], [3, 'c', 'banana'], [4, 'd', 'kiwi']]
    

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 2020-11-26
      • 2012-05-12
      • 2014-05-16
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多