【问题标题】:Get specific the nested key/values based on a condition from python nested dictionary根据 python 嵌套字典中的条件获取特定的嵌套键/值
【发布时间】:2020-12-07 18:45:43
【问题描述】:

我无法根据嵌套键解析下面的 python 嵌套字典。我想过滤一个键的值并返回与之相关的所有嵌套键/值。

{ 'US': { 'Washington': {'Seattle': {1: {'name': 'John', 'age': '27', 'gender': 'Male'}}},
{ 'Florida': {'some city': {2: {'name': 'Marie', 'age': '22', 'gender': 'Female'}}},
{ 'Ohio': {'some city': {3: {'name': 'Luna', 'age': '24', 'gender': 'Female', 'married': 'No'}}},
{ 'Nevada': {'some city': {4: {'name': 'Peter', 'age': '29', 'gender': 'Male', 'married': 'Yes'}}}}}

例如,过滤性别“男性”应返回以下内容:

美国 华盛顿 西雅图 1 姓名:约翰 年龄:27

美国 内华达州 某个城市 4 姓名:彼得 年龄:29 已婚:是的

您能否建议解析它的最佳方法。我试图在一个似乎不起作用的循环中使用 contains

【问题讨论】:

    标签: python dictionary nested


    【解决方案1】:

    我们可以递归地探索字典结构,跟踪每个点的键路径。当我们到达一个包含目标值的 dict 时,我们生成 dict 的路径和内容。

    我们可以使用这个生成器:

    def recursive_search(dct, target, path=None):
        if path is None:
            path = []
        if target in dct.values():
            out = ' '.join(path) + ' ' + ' '.join(f'{key}:{value}' for key, value in dct.items())
            yield out
        else:
            for key, value in dct.items():
                if isinstance(value, dict):
                    yield from recursive_search(value, target, path+[str(key)])
    

    这样:

    data = { 'US': { 'Washington': {'Seattle': {1: {'name': 'John', 'age': '27', 'gender': 'Male'}}},
     'Florida': {'some city': {2: {'name': 'Marie', 'age': '22', 'gender': 'Female'}}},
     'Ohio': {'some city': {3: {'name': 'Luna', 'age': '24', 'gender': 'Female', 'married': 'No'}}},
     'Nevada': {'some city': {4: {'name': 'Peter', 'age': '29', 'gender': 'Male', 'married': 'Yes'}}}}}
    
    
    for match in recursive_search(data, 'Male'):
         print(match)
            
    # US Washington Seattle 1 name:John age:27 gender:Male
    # US Nevada some city 4 name:Peter age:29 gender:Male married:Yes
    

    【讨论】:

      【解决方案2】:

      此代码将起作用...

      a_dict={ 'US': { 'Washington': {'Seattle': {1: {'name': 'John', 'age': '27', 'gender': 'Male'}}}, 'Florida': {'some city': {2: {'name': 'Marie', 'age': '22', 'gender': 'Female'}}}, 'Ohio': {'some city': {3: {'name': 'Luna', 'age': '24', 'gender': 'Female', 'married': 'No'}}}, 'Nevada': {'some city': {4: {'name': 'Peter', 'age': '29', 'gender': 'Male', 'married': 'Yes'}}}}}
      
      for k,v in a_dict.items():
          for k1,v1 in v.items():
              for k2,v2 in v1.items():
                  for k3,v3 in v2.items():
                      if v3["gender"]=="Male":
                          string=""
                          for k4,v4 in v3.items():
                              string=string+ k4+":"+v4+" "
                          print(k,k1,k2,k3, string.strip())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-29
        • 2021-05-10
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多