代码之家  ›  专栏  ›  技术社区  ›  ap21

python:将多个带有共享键的字典(在JSON中)连接到一个大型字典中

  •  -2
  • ap21  · 技术社区  · 6 年前

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

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

    最后,我想将所有这些使用共享键的独立字典连接到一个字典中,使用这些共享键,这样我就可以转换成一个数据框架并查看合并数据。我该怎么办?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Panda    6 年前

    将字典放在列表中,然后将列表转换为数据帧

    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
  •  1
  •   Sijan Bhandari    6 年前

    根据我的理解,您希望使用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]})
    >>>