【问题标题】:From list of dictionaries to np array of arrays and vice-versa从字典列表到数组的 np 数组,反之亦然
【发布时间】:2016-03-08 01:41:18
【问题描述】:

我正在尝试找到将字典列表转换为 numpy 数组数组的最佳方法(用 NULL 填充缺失值)。我还需要相反的方法:将数组的 numpy 数组转换为字典列表(给定键的标题)。

问题: Python 字典没有排序。而且在处理大量行时,理解列表并不是最佳选择。

示例:

listOfDicts = [{'key1': 10, 'key2': 15, 'key3': 19},
               {'key1': 20, 'key2': 25, 'key3': 29},
               {'key1': 30, 'key2': 35, 'key3': 39},
               {'key1': 40, 'key2': 45, 'key3': 49}]

预期输出:

[[10 15 19]
 [20 25 29]
 [30 35 39]
 [40 45 49]]

为什么需要这个:我需要这个是因为我将 Python 脚本集成到 Splunk 搜索中。 Splunk 的输入是一个字典列表,由splunk.Intersplunk.getOrganizedResults() 返回。为了显示输出,我们需要调用splunk.Intersplunk.outputResults(results),其中results 也是一个字典列表

【问题讨论】:

    标签: python list numpy dictionary splunk


    【解决方案1】:

    您可以使用pandas 轻松做到这一点:

    import pandas as pd
    listOfDicts = [{"key1":10, "key3":19},
                   {"key1":20, "key2":25, "key3":29},
                   {"key1":30, "key2":35, "key3":39},
                   {"key1":40, "key2":45, "key3":49}]
    
    df = pd.DataFrame(listOfDicts)
    vals = df.values
    vals
    
    array([[10, nan, 19],
           [20, 25,  29],
           [30, 35,  39],
           [40, 45,  49]])
    

    要将 NumPy 数组转换为字典,您可以使用:

    df2 = pd.DataFrame(vals, columns=df.columns)
    df2.to_dict(orient='records')
    
    [{'key1': 10.0, 'key2': nan, 'key3': 19.0},
     {'key1': 20.0, 'key2': 25.0, 'key3': 29.0},
     {'key1': 30.0, 'key2': 35.0, 'key3': 39.0},
     {'key1': 40.0, 'key2': 45.0, 'key3': 49.0}]
    

    【讨论】:

    • 我不知道熊猫能做到。谢谢。而相反的方式(数组数组+字典列表的标题)呢?
    • @belas:添加了相反的方式,同样适用于 pandas。 Pandas 可以从许多不同的对象构造 DataFrame,一旦有了 df,就可以直接转换为 dict。
    猜你喜欢
    • 2021-08-13
    • 2011-05-16
    • 2010-11-10
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多