gpt4 book ai didi

python - 在嵌套字典中查找键的所有键和键

转载 作者:行者123 更新时间:2023-11-28 18:21:18 25 4
gpt4 key购买 nike

我试图在 Python 的嵌套字典中查找数据的所有属性。某些对象在其键定义中可能有多个级别。我如何才能找到如此复杂的嵌套数据的表头(如果我们认为是表结构)。下面是我的几行数据,看看它的样子:

{"MessageType": "SALES.HOLDCREATED", "Event": {"Id": "ZWbDoMKQw6HDjFzCo8KuwpNmwofCjl7Co8OPwpDCncOSXMOdccKTZVVWZWbCnA==", "RefInfo": {"TId": {"Id": "ZMKXwpbClsOhwpNiw5E="}, "UserId": {"Id": "wpzCksKWwpbCpMKTYsKeZMKZbA=="}, "SentUtc": "2013-04-28T16:59:48.6698042", "Source": 1}, "ItemId": {"Id": 116228}, "Quantity": 1, "ExpirationDate": "2013-04-29T", "Description": null}}
{"MessageType": "SALES.SALEITEMCREATED", "Event": {"Id": "ZWbDoMKQw6HDjFzCo8KuwpNmwofCjl7Co8OPwpDCncOSXMOdccKTwp3CiFZkZMKWwpfCpMKZ", "RefInfo": {"TId": {"Id": "ZGA="}, "UserId": {"Id": "ZMKj"}, "SentUtc": "2013-01-04T", "Source": 1}, "Code": {"Code": "074108235206"}, "Sku": {"Sku": "Con CS54"}}}
{"MessageType": "SALES.SALEITEMCREATED", "Event": {"Id": "ZWbDoMKQw6HDjFzCo8KuwpNmwofCjl7Co8OPwpDCncOSXMOdccKTZcKHVsKcwpjClsKXwqTCmQ==", "RefInfo": {"TId": {"Id": "ZGA="}, "UserId": {"Id": "ZMKj"}, "SentUtc": "2013-01-04T", "Source": 1}, "Code": {"Code": "4000000021"}, "Sku": {"Sku": "NFL-Wallet-MK-2201"}}}

由于此数据首先是 Json 格式,因此我更改了格式并尝试找到 key :

import json

data = []
with open("data.raw", "r") as f:
for line in f:
data.append(json.loads(line))

for lines in data:
print(lines.keys())

但它为所有行提供了 dict_keys(['Event', 'MessageType'])。我需要的(对于我附加的这些数据)是一个如下列表:

'MessageType' 'Event_Id' 'Event_RefInfo_TId_Id'  'Event_RefInfo_UserId_Id' 'Event_RefInfo_SentUtc' 'Event_RefInfo_Source' 'Event_ItemId_Id' 'Event_ItemId_Quantity' 'Event_ItemId_ExpirationDate'     ...

数据很大,我只需要找出我有什么属性就可以了。

最佳答案

您需要遍历嵌套的字典,您当前的方法只能到达根字典的键。

您可以使用以下生成器函数来查找键并递归遍历嵌套字典:

import json 
from pprint import pprint

def find_keys(dct):
for k, v in dct.items():
if isinstance(v, dict):
# traverse nested dict
for x in find_keys(v):
yield "{}_{}".format(k, x)
else:
yield k

给定从您的 json 对象派生的字典列表,您可以在每个字典中找到键并将它们放入一个集合中,以便条目是唯一的:

s = set()
for d in json.loads(lst):
s.update(find_keys(d))

pprint(s)

set(['Event_Code_Code',
'Event_Description',
'Event_ExpirationDate',
'Event_Id',
'Event_ItemId_Id',
'Event_Quantity',
'Event_RefInfo_SentUtc',
'Event_RefInfo_Source',
'Event_RefInfo_TId_Id',
'Event_RefInfo_UserId_Id',
'Event_Sku_Sku',
'MessageType'])

关于python - 在嵌套字典中查找键的所有键和键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44863761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com