簡體   English   中英

如何在另一個字典中的Python字典中查找特定項目?

[英]How to find specific item in a Python dict within another dict?

假設我有一個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'}
    }

我很困惑我該如何操作代碼,在這里我只是傳遞參數以搜索例如Aya ,結果將如下所示:

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},'Nationality':{'John':'American','Aya':'Japanese','Anna': 'American'},'School':'哈佛大學','Address':{'John':'Canada','Aya':'California','Anna':'Mexico'}}


()最近一次調用ValueError Valueback(最近一次調用)19打印鍵,value [key] 20 ---> 21 get_info('Aya')

在get_info(name)中8 9 def get_info(name):---> 10作為key,sample_dict中的值:11 print(name)12如果type(value)是dict:

ValueError:太多值無法解包

這里有很多潛在的陷阱,但是由於缺少關於數據的假設的更多細節,您可以通過單行dict理解來滿足這種特定情況:

{k:(v['Aya'] if 'Aya' in v else v) for k,v in sample_dict.items()}
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

它應該像使用這樣的函數一樣簡單:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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