【问题标题】:How to find specific item in a Python dict within another dict?如何在另一个字典中的 Python 字典中查找特定项目?
【发布时间】:2017-06-26 06:41:02
【问题描述】:

假设我有一个 Python 字典,如下所示:

sample_dict = {'Grade': {'Aya':4.0, 'John':3.0, 'Anna':1.0},
     'Address': {'Aya':'California', 'John':'Canada', 'Anna':'Mexico'},
     'School': 'Harvard University',
     'Nationality':{'Aya':'Japanese', 'John':'American', 'Anna':'American'}
    }

我很困惑如何操纵代码,我只需将参数传递给搜索例如绫,它会导致如下所示:

Grade: Aya: 4.0
Address: Aya:California
School: Harvard University
Nationality: Aya: Japanese

更好:

Aya
Grade: 4.0
Address: California
School: Harvard University
Nationality: Japanese

这是我的开始:

def get_info(name):
    for key, value in sample_dict:
        print(name)
        if type(value) is dict:
            for people, equivalent in value:
                if(equivalent[name]):
                    print key, equivalent[name] 
                else:
                    print ("Not Found!")
        else:
            print key, value[key]

{'Grade': {'John': 3.0, 'Aya': 4.0, 'Anna': 1.0}, '国籍': {'John': '美国人', 'Aya': '日本人', '安娜':'美国'},'学校': '哈佛大学','地址':{'约翰':'加拿大','Aya': '加利福尼亚','安娜':'墨西哥'}}


ValueError Traceback(最近调用 最后)在() 19 打印键,值[键] 20 ---> 21 get_info('Aya')

在 get_info(name) 中 8 9 def get_info(名称): ---> 10 代表 key,sample_dict 中的值: 11 打印(姓名) 12 如果类型(值)是字典:

ValueError:解包的值太多

【问题讨论】:

    标签: python


    【解决方案1】:

    这里有很多潜在的陷阱,但没有更多关于可以对数据做出哪些假设的详细信息,您可以通过单行 dict 理解来满足这个特定情况:

    {k:(v['Aya'] if 'Aya' in v else v) for k,v in sample_dict.items()}
    

    【讨论】:

    • 如果你要找一个叫“Harv”的人怎么办;)
    • @JanZeiseweis 是的,因此免责声明。我们没有得到关于如何概括数据的任何细节,所以我采取了相当狭隘的解释。
    【解决方案2】:
    sample_dict = {'Grade': {'Aya':4.0, 'John':3.0, 'Anna':1.0},
         'Address': {'Aya':'California', 'John':'Canada', 'Anna':'Mexico'},
         'School': 'Harvard University',
         'Nationality':{'Aya':'Japanese', 'John':'American', 'Anna':'American'}
        }
    
    def get_info(name):
        _info = {}
        for key, val in sample_dict.items():
            try:
                if isinstance(val, dict):
                    val = val[name]
                _info[key] = val
            except KeyError:
                return None
        return _info
    

    【讨论】:

      【解决方案3】:

      应该像使用这样的函数一样简单:

      def get_info(name):
          print(name, '\n'
                      'Grade:', sample_dict['Grade'][name], '\n'
                      'Address:', sample_dict['Address'][name], '\n'
                      'School:', sample_dict['School'], '\n'
                      'Nationality:', sample_dict['Nationality'][name])
      

      然后在函数中使用你的任何名字都会像你想要的那样工作:

      get_info('Aya')
      
      Aya
      Grade: 4.0
      Address: California
      School: Harvard University
      Nationality: Japanese
      

      【讨论】:

      • 我应该注意到,在示例字典中,学校条目没有名称关联,因此该函数实际上并没有使用名称检查该条目。如果您曾经更改字典以按名称指定学校,就像在其他字典条目中一样,您只需将 [name] 添加到函数的 School 打印行中,例如 print('School:', sample_dict['School'] [名称])
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多