Python 如何按索引顺序展平列表矩阵(列表列表)?
给我:Python 如何按索引顺序展平列表矩阵(列表列表)?,python,list,dictionary,for-loop,matrix,Python,List,Dictionary,For Loop,Matrix,给我: 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) 我该如何用最简单的方法将此lits展平到(下方): ['a', 'b
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)
我该如何用最简单的方法将此lits展平到(下方):
['a', 'b', 'c', 'd', 'hello', 'mellow', 'fellow', 'jello', 2, 3, 6, 8]
和到字典:
['a', 'hello', 2, 'b', 'mellow', 3, 'c', 'fellow', 6, 'd', 'jello', 8]
对过程的解释会很有帮助。您可以使用
zip
转换矩阵:
['a': ['hello' 2], 'b': ['mellow', 3], 'c': ['fellow', 6], 'd': ['jello', 8]]
要获取词典,请执行以下操作:
[y for x in zip(*list_data) for y in x]
# ['a', 'hello', 2, 'b', 'mellow', 3, 'c', 'fellow', 6, 'd', 'jello', 8]
说明:
['a', 'b', 'c', 'd', 'hello', 'mellow', 'fellow', 'jello', 2, 3, 6, 8]
字典报告为键和值,d[k,v]
因此,第一部分
列表数据[0]
从每个列表的第一个索引(0)中选择键,第二部分zip(*list\u data[1:])
添加列表的剩余元素作为该键的值,用于展平列表,您可以使用as:
要将值映射到所需的dict
,您可以使用字典理解表达式:
>>> from itertools import chain
>>> list(chain(*zip(*list_data)))
['a', 'hello', 2, 'b', 'mellow', 3, 'c', 'fellow', 6, 'd', 'jello', 8]
我刚给字典加了一些说明。我只是想澄清一下。编辑看起来不错。只是键不包括
zip
,第一个zip
用于将键和值组合成对。我对你的描述做了一点修改。我只是想澄清一下为什么这篇文章中有一个简单的括号。值周围的括号表示它是一个元组而不是列表,在大多数情况下,它不应该影响结果。但是你可以通过{k:list(v)for k,v in my_dict.items()}
将它们转换为list,假设my_dict
是你得到的字典.Psidom-你能就我面临的问题给我一点指导吗。我想使用groupby为pandas数据帧运行一个applymap函数。我认为这个问题类似于在dict中使用一个唯一的键,但是我想使用dataframe,因为真实的数据将是巨大的。谢谢
>>> {i: [j, k] for i, j, k in zip(*list_data)}
{'a': ['hello', 2], 'c': ['fellow', 6], 'b': ['mellow', 3], 'd': ['jello', 8]}