【问题标题】:Python: concatenate many dictionaries with shared keys (in a JSON) into one large dictionaryPython:将许多具有共享键的字典(在 JSON 中)连接到一个大字典中
【发布时间】:2018-07-25 02:11:08
【问题描述】:

我正在运行许多模拟,每个模拟都将一个数据字典附加到一个基本 JSON 文件中,如下所示:

{"Hnet": 0.047545953331778974,"Kabs": 0.4834911581175083, "t": 0.05}
{"Hnet": 0.8080405956760083, "Kabs": 0.187428764511818, "t": 0.15}
...

最后,我想使用共享键将所有这些单独的字典连接到只有一个字典中,具有这些共享键,以便我可以转换为数据框并查看合并后的数据。我该怎么做?

【问题讨论】:

  • 这和pandas有什么关系?你能证明自己任何努力解决这个问题吗?
  • 到目前为止你尝试了什么?
  • 请尽可能遵循minimal reproducible example 准则。目标不明确。

标签: python json dictionary


【解决方案1】:

将字典放入列表中,然后将列表转换为 DataFrame

import pandas as pd

list_of_dicts =[{"Hnet": 0.047545953331778974,"Kabs": 0.4834911581175083, "t": 0.05},
                {"Hnet": 0.8080405956760083, "Kabs": 0.187428764511818, "t": 0.15},
                {"Hnet": 0.2983472834234521, "Kabs": 0.234872398473289, "t": 0.10},
                {"Hnet": 0.012937281973213913, "Kabs": 0.384849210587031, "t": 0.05}]

df = pd.DataFrame(list_of_dicts)

print(df)

您的输出将是:

       Hnet      Kabs     t
0  0.047546  0.483491  0.05
1  0.808041  0.187429  0.15
2  0.298347  0.234872  0.10
3  0.012937  0.384849  0.05

【讨论】:

    【解决方案2】:

    据我了解,您希望使用 python 来根据键合并值。正确的方法是将值放入列表中,以后将它们用作数据框会更容易。

    >>> with open('sample.json') as f:
    ...      data = json.loads(f.read())
    ... 
    >>> data
    [{'Hnet': 0.047545953331778974, 'Kabs': 0.4834911581175083, 't': 0.05}, {'Hnet': 0.8080405956760083, 'Kabs': 0.187428764511818, 't': 0.15}]
    >>> 
    >>> from collections import defaultdict
    >>> final_data = defaultdict(list)
    >>> for row in data:
    ...     for k, v in row.items():
    ...         final_data[k].append(v)
    ... 
    >>> final_data
    defaultdict(<class 'list'>, {'Hnet': [0.047545953331778974, 0.8080405956760083], 'Kabs': [0.4834911581175083, 0.187428764511818], 't': [0.05, 0.15]})
    >>> 
    

    【讨论】:

    • 我正在尝试理解代码。 defaultdict(list) 在这里做什么?
    • @ap21 defaultdict 充当不存在键的默认条目值。这意味着如果您尝试访问字典中不存在的键,它会查找默认值。在我们的例子中,空的list 将被返回。
    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2014-12-14
    • 2016-03-12
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多