如何展平包含具有不同数量字典的列表的列表? [复制]
Posted
技术标签:
【中文标题】如何展平包含具有不同数量字典的列表的列表? [复制]【英文标题】:How to flatten a list containing lists with different numbers of dictionaries? [duplicate] 【发布时间】:2020-12-13 21:35:22 【问题描述】:我有一个如下的python代码:
import numpy as np
import multiprocessing as mp
def func(first, sec):
results = []
for x in range(first):
result_dict = "a": x, "b": x**sec, "c": x/sec
results.append(result_dict.copy())
return results
with mp.Pool(mp.cpu_count()) as pool:
res = pool.starmap(func, [(a, 8) for a in range(1, 4)])
然后我用这段代码将res
展平:
res = np.asarray(res)
res = res.reshape(-1)
res = np.array(res).tolist()
之后,当我打印 res
时,输出如下:
[['a': 0, 'b': 0, 'c': 0.0],
['a': 0, 'b': 0, 'c': 0.0, 'a': 1, 'b': 1, 'c': 0.125],
['a': 0, 'b': 0, 'c': 0.0,
'a': 1, 'b': 1, 'c': 0.125,
'a': 2, 'b': 256, 'c': 0.25]]
但我希望输出是这样的:
['a': 0, 'b': 0, 'c': 0.0,
'a': 0, 'b': 0, 'c': 0.0,
'a': 1, 'b': 1, 'c': 0.125,
'a': 0, 'b': 0, 'c': 0.0,
'a': 1, 'b': 1, 'c': 0.125,
'a': 2, 'b': 256, 'c': 0.25]
您知道如何更改代码以获得res
所需的结果吗?
【问题讨论】:
from itertools import chain; list(chain(*t))
【参考方案1】:
chain.from_iterable
of itertools
library 允许您将子列表链接到一个列表。
import itertools
res = [['a': 0, 'b': 0, 'c': 0.0],
['a': 0, 'b': 0, 'c': 0.0, 'a': 1, 'b': 1, 'c': 0.125],
['a': 0, 'b': 0, 'c': 0.0,
'a': 1, 'b': 1, 'c': 0.125,
'a': 2, 'b': 256, 'c': 0.25]]
print(list(itertools.chain.from_iterable(res)))
【讨论】:
【参考方案2】:在您的示例中,您将字典存储在列表列表中,列表推导也可以:
res = [['a': 0, 'b': 0, 'c': 0.0],
['a': 0, 'b': 0, 'c': 0.0, 'a': 1, 'b': 1, 'c': 0.125],
['a': 0, 'b': 0, 'c': 0.0,
'a': 1, 'b': 1, 'c': 0.125,
'a': 2, 'b': 256, 'c': 0.25]]
flat_res = [item for items in res for item in items]
输出
print(flat_res)
# ['a': 0, 'b': 0, 'c': 0.0, 'a': 0, 'b': 0, 'c': 0.0, 'a': 1, 'b': 1, 'c': 0.125, 'a': 0, 'b': 0, 'c': 0.0, 'a': 1, 'b': 1, 'c': 0.125, 'a': 2, 'b': 256, 'c': 0.25]
【讨论】:
以上是关于如何展平包含具有不同数量字典的列表的列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章