如何提取嵌套python dict中的所有数据键和值

2024-10-06 15:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个来自python中API调用的JSON响应,这是dict类型,我需要通过遍历嵌套字典来提取所有键和值。 我需要一些帮助来实现这一点,最好的方法是什么来检查主dict中的一个项是另一个dict,还是只是一个具有单个值的键而不是另一个dict

{'html_attributions': [],
 'next_page_token': 'CrQEJAIAAO1gjIXdvnDjB40bRlRk9xUvHVqB_ZeYxmscrvINB13WdRTHfCoNorfeyJIc8yiW07HzrnxlU90hFiX0hn2Pe30iIeL5d8FBwBUjhC483L0jCdx7s0b4TY85rQnghHoa0lPKDSMRMDBedJZCaMbn-lWqpDdvZtakJLuZpIYjw8Q0R6aGsmcej5oWS0xZ6ovsoRz-coicPea_1lDeDVNFkae3SDGtJ3p2WgXu6vzhfUowCi4K9vUOP2WT_e0Q_UUrP0X1ASQMN4kMh3ibcbOXMGHoi4MkpYe1B2tmfdN5vSkH929o6FbXwd7aciZWswFnq1rmARV4FSaL8fbtyX0juDddOP4g4NcVi6MnCXRVw23S61d-Pu3X85gc-dIXqigcCPnhOKVmqG3FdZC_fDTqgB3nXBmHOETHLjdHLa0BfMT-mqamZ2Zr--sBa05JEgbb8YquLsgS4rb-dLJj4U0Gq0jI7BNstRt0Dszy8bj9admRe9xYFGUlIs7ex9yCAilhJ4j4U91FEi4Po89sHguxkpuRGEQv88whgnfvTLCg0YbA71DPv7OhfR4PwbdWk1n6ElUCOLHR5lWarWU4iAhPjNBKqnXethE32qVakubNU69EEgHu0Ojq87XkaGuWBV6qaiZKmJFkY1dUKNPv0udEmesu9MQP35jpXRRr7r_EaN5neWL57pmyXFAuzQuRxa-7CORw_Sa2FTiBRIxTcpz3gAAP5X3CCKctxkSb8DruZ2YGEhBMAnIESGWZXQDTnGKd-Xf2GhQjt_LI8xL1-V8hHdTL-lK2DHJWNw',
 'results': [{'formatted_address': 'University of Lagos, Akoka Rd, Yaba, Lagos, Nigeria',
   'geometry': {'location': {'lat': 6.5151087, 'lng': 3.3886033},
    'viewport': {'northeast': {'lat': 6.522969049999999,
      'lng': 3.394707349999999},
     'southwest': {'lat': 6.50730845, 'lng': 3.38207915}}},
   'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/school-71.png',
   'id': '6bd1760a7bca49e16e560fec68f6125c2440f5ca',
   'name': 'UNILAG Nigeria',
   'opening_hours': {'open_now': False},
   'photos': [{'height': 2988,
     'html_attributions': ['<a href="https://maps.google.com/maps/contrib/109021919043392669000">Austin Chikwado Ofor</a>'],
     'photo_reference': 'CmRaAAAA7HbCOQBhVUUOZZC6-P9I3a9BoSf5lAucLlrcBUQrOPJuKCjy2oW6iCu205Hl6h1vYBC8W50y70Mnw4owsxiQ7HfWWXSk8ZV3QMN-ObVXXdsjrZsP0NFlguInVpxJkqN7EhBPh-DsZG7xkKnzwmIJ784pGhT7Ty0D8XWfGBZh2ayHMpMsk5dwPw',
     'width': 5312}],
   'place_id': 'ChIJi5nvgOSMOxARRiBHB-xDQ7k',
   'plus_code': {'compound_code': 'G98Q+2C Lagos',
    'global_code': '6FR5G98Q+2C'},
   'rating': 4.4,
   'reference': 'ChIJi5nvgOSMOxARRiBHB-xDQ7k',
   'types': ['university', 'point_of_interest', 'establishment'],
   'user_ratings_total': 700},

-

data_list = data_df['geometry'][0]['location'].keys()

for x in list(data_list):
    if isinstance(x, dict):
        print(x,data_list[x].values())
    else:
        print(x)

Tags: ofhttpsdatahtmlcodelocationdictlist
2条回答

因为您没有提供任何示例数据,所以我假设为HTTP响应对象。 首先,您必须像这样从对象获取内容:

数据流读取()

然后,若响应具有嵌套的json,则执行迭代以获取键和值

如果您提供响应对象的内容,那就太好了

import json, pandas as pd
df = pd.json_normalize(json.loads(json_data)['results'])
df.head()

我最终发现了一个json_normalize方法。最初,我构建了一个嵌套条件来提取所有必需的特性,这也可能是一个潜在的解决方案

 item_keys = []


for item in data['results']:
    for i in item:
        if i not in item_keys:
            item_keys.append(i)

def print_cont(my_data):
    for x in item_keys:
        print(x)
        try:
            y = my_data[0][x]
            if isinstance(y,dict):
                for z in y:
                    k = y[z]
                    print(z,k)
                    if isinstance(k,dict):
                        for l in k:
                            print(l,k[l])
            else:
                print(y, type(y))
        except (AttributeError,TypeError,ValueError):
            print(x)
        except KeyError:
            pass

相关问题 更多 >