【问题标题】:python flatten/unwrap list of dictionaries in listpython展平/展开列表中的字典列表
【发布时间】:2021-09-07 17:00:52
【问题描述】:

我在下面的列表中有字典列表

A = [[{'a': '1', 'b': '2'}],[{...}],[{...}],[],[],[{'x': '25', 'z':'26'}]]

列表“A”中的 7 个字典列表(来自 7 天的数据) python using for loop in def function

A 中的一些字典列表有数据,一些没有

我想像这样展平/展开到不同的列表 B

B = [{'a': '1', 'b': '2', ..., 'x': '25', 'z':'26'}]

作为字典列表。

我已经尝试过(对应的导入):

B = (list(itertools.chain(*A)))

B = [item for sublist in A for item in sublist]

B = [dict(chain(*map(dict.items, d.values()))) for d in A]

结果,以上 3 种展平/展开方法给了我一个空列表 []。 我想这样做是因为只有一个列表适合我在 html 中的 ajax 附加格式 这也将应用于月、季度、半年和年的数据集。(我还需要在一个列表中展平 365 个字典列表,使用 for 循环创建此列表)

我用上面的方法错了吗?

展平/展开是否必须遵循列表结构的每个无组织列表?

最好不要通过从python using for loop in def function更改for循环来创建像列表A这样的无组织列表吗?

编辑:我在问题中分离了未展平列表(A)和展平列表(B)。

【问题讨论】:

    标签: python list loops dictionary iteration


    【解决方案1】:

    您可以使用itertools.chain() 和dict理解:

    A = [[{1:1, 2:2}], [], [{3:3}], [{8:8}], [], [], [{9:9}]]
    b = itertools.chain(*A)
    {k:v for x in b for k,v in x.items()}
    

    预期结果: {1: 1, 2: 2, 3: 3, 8: 8, 9: 9}

    关于 itertools 的更多信息:https://www.geeksforgeeks.org/python-itertools/

    更多关于 dict 理解:https://www.programiz.com/python-programming/dictionary-comprehension

    【讨论】:

    • 感谢您的帮助,我找到了我的代码来完成我想要的工作,因为我没有放入另一个列表,这让我不需要打开包装。我整天都在寻找一个更难的解决方案,发现在小睡后将数据放入不必要的额外 []
    猜你喜欢
    • 2018-07-19
    • 2019-11-04
    • 1970-01-01
    • 2021-01-05
    • 2014-02-26
    • 2019-01-11
    • 2018-11-21
    • 2019-05-09
    • 2020-06-22
    相关资源
    最近更新 更多