如何在另一个dict中找到Python dict中的特定项?

2024-04-29 11:19:30 发布

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

假设我有一个类似于下面的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': 'Harvard University', 'Address': {'John': 'Canada', 'Aya': 'California', 'Anna': 'Mexico'}}


ValueError回溯(最近的调用 最后)在() 19打印键,值[键] 20 --->;21获取信息('Aya')

在get\ U info(名称)中 8 9 def get\ U info(名称): --->;10表示键,示例中的值: 11印刷体(姓名) 12如果类型(值)是dict:

ValueError:要解包的值太多


Tags: keynameaddressjohndictgradeamericanaya
3条回答
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

这里有很多潜在的陷阱,但是如果没有更多关于数据的假设的细节,你可以用一行dict理解来满足这个特定的案例:

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

相关问题 更多 >