【问题标题】:How to flatten the list matrix (list of lists) in order of index?如何按索引顺序展平列表矩阵(列表列表)?
【发布时间】:2017-06-23 14:14:43
【问题描述】:
list_data = [['a', 'b', 'c', 'd'],
         ['hello', 'mellow', 'fellow', 'jello'],
         [2, 3, 6, 8]]

flattened = []
for data in list_data:
    for x in data:
        flattened.append(x)

print(flatenned)

给我:

['a', 'b', 'c', 'd', 'hello', 'mellow', 'fellow', 'jello', 2, 3, 6, 8]

如何,我能否以最简单的方式将这个灯展平到(下):

['a', 'hello', 2, 'b', 'mellow', 3,  'c', 'fellow', 6, 'd', 'jello', 8]

和到字典:

['a': ['hello' 2], 'b': ['mellow', 3], 'c': ['fellow', 6], 'd': ['jello', 8]]

解释过程会很有帮助。

【问题讨论】:

    标签: python list dictionary for-loop matrix


    【解决方案1】:

    你可以使用zip来转置矩阵:

    [y for x in zip(*list_data) for y in x]
    # ['a', 'hello', 2, 'b', 'mellow', 3, 'c', 'fellow', 6, 'd', 'jello', 8]
    

    获取字典:

    dict(zip(list_data[0], zip(*list_data[1:])))
    # {'a': ('hello', 2), 'b': ('mellow', 3), 'c': ('fellow', 6), 'd': ('jello', 8)}
    

    说明:

    字典被报告为键和值,d[k,v]。

    所以,第一部分 list_data[0] 从每个列表的第一个索引 (0) 中选择 keys,而后部分 zip(*list_data[1:]) 添加列表的剩余元素作为值为那个键。

    【讨论】:

    • 我刚刚为字典添加了一些描述。只是想为自己澄清一些事情。
    • 编辑看起来不错。只是键不包括zip,第一个zip 用于将键和值组合成对。我稍微修改了你的描述。
    • 只是为了澄清为什么这个dict 中有一个简单的括号。不过这有关系吗。
    • 值周围的括号表示它是一个元组而不是列表,在大多数情况下,它不应该影响您的结果。但是你可以通过{k: list(v) for k, v in my_dict.items()} 将它们转换为列表,假设my_dict 是你得到的字典。
    • Psidom - 您能否就我面临的问题提供一些指导。我想运行applymap function for a pandas dataframe using a groupby。 stackoverflow.com/questions/42171132/… 我认为这个问题类似于在 dict 中使用唯一键,但我想使用数据框,因为真实数据会很大。谢谢
    【解决方案2】:

    为了展平列表,您可以使用itertools.chain 和zip 作为:

    >>> from itertools import chain
    
    >>> list(chain(*zip(*list_data)))
    ['a', 'hello', 2, 'b', 'mellow', 3, 'c', 'fellow', 6, 'd', 'jello', 8]
    

    要将值映射到所需的dict,您可以使用带有字典理解表达式的zip:

    >>> {i: [j, k] for i, j, k in zip(*list_data)}
    {'a': ['hello', 2], 'c': ['fellow', 6], 'b': ['mellow', 3], 'd': ['jello', 8]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2022-10-25
      • 2014-08-12
      • 2022-10-07
      • 2013-04-24
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多