dictionary - 在 python 中,字典从JSON数据创建字典列表

我想从 python 中的json值创建字典列表。 json数据是


{


"data": [


 {


"date":"2017-07-28_15-54-10",


"name":"name1",


"state":"true"


 },


 {


"date":"2017-07-29_15-54-10",


"name":"name2",


"state":"true"


 }


 ]


}



我想将这些数据放入 dicts(name1,name2,name3) 数组中,其中包含 dicts ("数据"json的一部分) 数组,


[


 {


"name1": [


 {


"date":"2017-07-28_15-54-10"


 },


 {


"state":"true"


 }


 ]


 },


 {


"name2": [


 {


"date":"2017-07-28_15-54-10"


 },


 {


"state":"true"


 }


 ]


 }


]



我得到了所有的数据和我的代码


for jn in data:


 name = jn.get("name")


 my_dict = {}


 my_dict1 = {}


 my_list = []


 my_dict["date"] = jn.get("date")


 my_dict1["state"] = jn.get("state")


 my_list.append(my_dict) # dict for date


 my_list.append(my_dict1) # dict for state


 my_name_dict = {}


 my_name_dict[name] = my_list # add the small dicts to the"name" dict


 my_final_array.append(my_name_dict)


 print(my_final_array)



我可以得到这个输出


 {


"name1": [


 {


"date":"2017-07-28_15-54-10"


 },


 {


"state":"true"


 }


 ]


 },


 {


"name2": [


 {


"date":"2017-07-28_15-54-10"


 },


 {


"state":"true"


 }


 ]


 }



我正在努力将这些dicts添加到列表/数组中。 打印 my_final_array的值时,只得到字典的最后一行,而不是列表中的所有行。 我的代码也有些凌乱,有其他方法可以做到这一点?

时间:

使用简单的列表解析:


d = {


"data": [


 {


"date":"2017-07-28_15-54-10", 


"name":"name1", 


"state":"true",


 }, 


 {


"date":"2017-07-29_15-54-10", 


"name":"name2", 


"state":"true",


 }


 ]


 }



records = [{x["name"]: [{"date": x["date"]}, {"state": x["state"]}]} for x in d["data"]]


records



>>> [{'name1': [{'date': '2017-07-28_15-54-10'}, {'state': 'true'}]},


 {'name2': [{'date': '2017-07-29_15-54-10'}, {'state': 'true'}]}]



如果你计划向记录中添加更多的key,可以通过获取所有键,例如 name,使列表理解更通用,例如:


records = [


 {x["name"]: [{k: v} for k, v in x.items() if k!="name"]} 


 for x in d["data"]


]



你可以尝试以下操作:


json_data = {


"data": [


 {


"date":"2017-07-28_15-54-10",


"name":"name1",


"state":"true",


 },


 {


"date":"2017-07-29_15-54-10",


"name":"name2",


"state":"true",


 }


 ]


}


main_list = []


for val in json_data['data']:


 temp_dict = {}


 temp_key = val.pop('name')


 temp_dict[temp_key] = [val]


 main_list.append(temp_dict)


print(main_list)



输出:


[ 


 { 


 'name1':[ 


 { 


 'date':'2017-07-28_15-54-10',


 'state':'true'


 }


 ]


 },


 { 


 'name2':[ 


 { 


 'date':'2017-07-29_15-54-10',


 'state':'true'


 }


 ]


 }


]



你需要在for语句under创建最后一个列表,如下所示:


my_final_array = []


for jn in data:


 name = jn.get("name")


 my_dict = {}


 my_dict1 = {}


 my_list = []


 my_dict["date"] = jn.get("date")


 my_dict1["state"] = jn.get("state")


 my_list.append(my_dict) # dict for date


 my_list.append(my_dict1) # dict for state


 my_name_dict = {}


 my_name_dict[name] = my_list # add the small dicts to the"name" dict


 my_final_array.append(my_name_dict)


 print(my_final_array)



Pythonic这样做的方式似乎是字典解析


a = {


"data": [


 {


"date":"2017-07-28_15-54-10",


"name":"name1",


"state":"true"


 },


 {


"date":"2017-07-29_15-54-10",


"name":"name2",


"state":"true"


 }


 ]


}



output = [{item['name']: {k:v for (k,v) in item.items() if k is not 'name'} for item in a['data']}]



output


> [{'name1': {'date': '2017-07-28_15-54-10', 'state': 'true'}, 'name2': {'date': '2017-07-29_15-54-10', 'state': 'true'}}]





r = {


"data": [


 {


"date":"2017-07-28_15-54-10",


"name":"name1",


"state":"true",


 },


 {


"date":"2017-07-29_15-54-10",


"name":"name2",


"state":"true",


 }


 ]


 }



data = r['data']


result = []


mkdic = lambda x: [{k: v} for k, v in x.items() if k!="name"]


for i in data:


 result.append( {i.get("name"): mkdic(i) })


import pprint


pprint.pprint(result, indent = 2)



...