【问题标题】: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))

标签: python arrays list numpy


【解决方案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}]
    

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 2020-09-21
      • 2021-01-13
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      相关资源
      最近更新 更多