簡體   English   中英

將字典關鍵字作為字典中的一項傳遞

[英]Pass dictionary key as an item in the dictionary

我有一個復雜的列表(json文件),我試圖對其進行拼合以將其導出到CSV文件。

一些注意事項:

  • 一些巢中的物體數量可能會有所不同
  • 某些值可以為null(空)
  • 數據是關鍵,因此我需要像之前在上一個問題中一樣在Javascript中操作它: LINK

我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM