[英]Pass dictionary key as an item in the dictionary
我有一個復雜的列表(json文件),我試圖對其進行拼合以將其導出到CSV文件。
一些注意事項:
我的JSON如下所示:
[
{
"masterName": "FirstOne",
"mainNames": [
{
"numbers": {},
"Name": "PlacedValue1",
"Type": "zzz"
},
{
"numbers": {
"2019-05-17T00:00:00Z": {
"NumberOne": 2.0,
"NumberTwo": 0.0
},
"2019-05-29T00:00:00Z": {
"NumberOne": 89153.0,
"NumberTwo": 18.0
},
"2019-05-30T00:00:00Z": {
"NumberOne": 14.0,
"NumberTwo": 0.0
}
},
"Name": "PlacedValue2",
"Type": "zzz"
},
{
"numbers": {
"2019-05-29T00:00:00Z": {
"NumberOne": 219737.0,
"NumberTwo": 85.0
},
"2019-05-30T00:00:00Z": {
"NumberOne": 261415.0,
"NumberTwo": 116.0
}
},
"Name": "PlacedValue3",
"Type": "zzz"
}
]
},
{
"masterName": "SecondOne",
"mainNames": [
{
"numbers": {
"2019-05-17T00:00:00Z": {
"NumberOne": 2.0,
"NumberTwo": 0.0
},
"2019-05-29T00:00:00Z": {
"NumberOne": 89153.0,
"NumberTwo": 18.0
}
},
"Name": "PlacedValue3",
"Type": "zzz"
},
{
"numbers": {
"2019-05-29T00:00:00Z": {
"NumberOne": 219737.0,
"NumberTwo": 85.0
}
},
"Name": "PlacedValue4",
"Type": "zzz"
}
]
}
]
我現在嘗試着重於將字典鍵(在這種情況下為date)作為等效字典中的一個元素傳遞。 例如,我想要這樣:
"2019-05-17T00:00:00Z": {
"NumberOne": 2.0,
"NumberTwo": 0.0
}
成為:
{
"date" : "2019-05-17T00:00:00Z"
"NumberOne": 2.0,
"NumberTwo": 0.0
}
但這到目前為止仍然失敗(代碼中的注釋):
json_array2 = {“ 2019-05-19T00:00:00Z”:{“一個”:185,},“ 2019-04-25T00:00:00Z”:{“兩個”:207,}}
#The idea is to add the date as a new item in the dictionary as a start
for v in json_array2:
key = v
json_array['date'] = v
print(json_array2)
對於這些數字字典中的每個個體,這會將嵌套的字典結構更改為字典列表:
numbers_dict = {
"2019-05-17T00:00:00Z": {
"NumberOne": 2.0,
"NumberTwo": 0.0
},
"2019-05-29T00:00:00Z": {
"NumberOne": 89153.0,
"NumberTwo": 18.0
},
"2019-05-30T00:00:00Z": {
"NumberOne": 14.0,
"NumberTwo": 0.0
}
}
numbers_dict = [{"date":key, **value} for key, value in numbers_dict.items()]
之后,您可以按照通常的方式將此方法應用於所需的JSON中的任何字段。 例:
for item in my_json:
for name in item['mainNames']:
name['numbers'] = [{"date":key, **value} for key, value in name['numbers'].items()]
此腳本會將所有鍵numbers
從dict更改為dict列表,並將日期作為這些dict中的鍵:
data = [
{
"masterName": "FirstOne",
"mainNames": [
{
"numbers": {},
"Name": "PlacedValue1",
"Type": "zzz"
},
{
"numbers": {
"2019-05-17T00:00:00Z": {
"NumberOne": 2.0,
"NumberTwo": 0.0
},
"2019-05-29T00:00:00Z": {
"NumberOne": 89153.0,
"NumberTwo": 18.0
},
"2019-05-30T00:00:00Z": {
"NumberOne": 14.0,
"NumberTwo": 0.0
}
},
"Name": "PlacedValue2",
"Type": "zzz"
},
{
"numbers": {
"2019-05-29T00:00:00Z": {
"NumberOne": 219737.0,
"NumberTwo": 85.0
},
"2019-05-30T00:00:00Z": {
"NumberOne": 261415.0,
"NumberTwo": 116.0
}
},
"Name": "PlacedValue3",
"Type": "zzz"
}
]
},
{
"masterName": "SecondOne",
"mainNames": [
{
"numbers": {
"2019-05-17T00:00:00Z": {
"NumberOne": 2.0,
"NumberTwo": 0.0
},
"2019-05-29T00:00:00Z": {
"NumberOne": 89153.0,
"NumberTwo": 18.0
}
},
"Name": "PlacedValue3",
"Type": "zzz"
},
{
"numbers": {
"2019-05-29T00:00:00Z": {
"NumberOne": 219737.0,
"NumberTwo": 85.0
}
},
"Name": "PlacedValue4",
"Type": "zzz"
}
]
}
]
import json
def change_keys(d):
for k, v in d.items():
if k=='numbers':
new_v = []
for kk, vv in v.items():
new_v.append({'date': kk})
new_v[-1].update(**vv)
new_d = {'numbers':new_v}
d2 = d.copy()
del d2['numbers']
new_d.update(**d2)
return new_d
return d
new_d = json.loads(json.dumps(data), object_hook=change_keys)
print(json.dumps(new_d, indent=4))
打印:
[
{
"masterName": "FirstOne",
"mainNames": [
{
"numbers": [],
"Name": "PlacedValue1",
"Type": "zzz"
},
{
"numbers": [
{
"date": "2019-05-17T00:00:00Z",
"NumberOne": 2.0,
"NumberTwo": 0.0
},
{
"date": "2019-05-29T00:00:00Z",
"NumberOne": 89153.0,
"NumberTwo": 18.0
},
{
"date": "2019-05-30T00:00:00Z",
"NumberOne": 14.0,
"NumberTwo": 0.0
}
],
"Name": "PlacedValue2",
"Type": "zzz"
},
{
"numbers": [
{
"date": "2019-05-29T00:00:00Z",
"NumberOne": 219737.0,
"NumberTwo": 85.0
},
{
"date": "2019-05-30T00:00:00Z",
"NumberOne": 261415.0,
"NumberTwo": 116.0
}
],
"Name": "PlacedValue3",
"Type": "zzz"
}
]
},
{
"masterName": "SecondOne",
"mainNames": [
{
"numbers": [
{
"date": "2019-05-17T00:00:00Z",
"NumberOne": 2.0,
"NumberTwo": 0.0
},
{
"date": "2019-05-29T00:00:00Z",
"NumberOne": 89153.0,
"NumberTwo": 18.0
}
],
"Name": "PlacedValue3",
"Type": "zzz"
},
{
"numbers": [
{
"date": "2019-05-29T00:00:00Z",
"NumberOne": 219737.0,
"NumberTwo": 85.0
}
],
"Name": "PlacedValue4",
"Type": "zzz"
}
]
}
]
編輯:還保留“名稱”和“類型”鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.