在python中解压缩嵌套字典列表

时间:2017-10-26 09:04:34

标签: python json pandas

如果有人能提出更多Pythonic方式处理以下问题,我将非常感激:

问题: 我有一个json对象解析成python对象(dict)。我遇到的问题是json对象结构是一个字典列表(dict1)。这些词典包含字典(dict2)。

我想解析dict1的所有内容,并在dict1中组合dict2的内容。

此后,我想把它解析成熊猫。



json_object = {
  "data": [{
      "complete": "true",
      "data_two": {
        "a": "5",
        "b": "6",
        "c": "6",
        "d": "8"
      },
      "time": "2016-10-17",
      "End_number": 2
    },
    {
      "complete": "true",
      "data_two": {
        "a": "11",
        "b": "21",
        "c": "31",
        "d": "41"
      },
      "time": "2016-10-17",
      "End_number": 1
    }
  ],
  "Location": "DE",
  "End Zone": 5
}




我的尝试:

    dataList =  json_object['data']  
    Unpacked_Data =   [(d['time'],d['End_number'], d['data_two'].keys(),d['data_two'].values()) for d in dataList]

Unpacked_Data是现在包含的元组列表(时间,end_number,[键列表],[值列表])

要在Pandas数据帧中使用它,我需要解压缩我的元组中的两个列表。 - > 有一种简单的方法可以在元组中解压缩列表吗?

是否有更好,更优雅/ Pythonic的方法来解决这个问题?

谢谢, 12avi

1 个答案:

答案 0 :(得分:0)

一种方式(使用pandas)首先将所有内容放入数据框,然后将pd.Series应用于其中:

df = pd.DataFrame(Unpacked_Data)
unpacked0 = df[2].apply(lambda x: pd.Series(list(x)))
unpacked1 = df[3].apply(lambda x: pd.Series(list(x)))
pd.concat((df[[0,1]],unpacked0,unpacked1))

另一种方法是使用list comprehension和argument unpacking:

df = pd.DataFrame([[a,b,*c,*d] for a,b,c,d in Unpacked_Data])

但是,如果打包列表的长度不同,则第二种方法可能无法按照您希望的方式排列。