在字典中查找特定的键值对

时间:2021-05-09 00:26:25

标签: python dictionary

my_dict = {1: ['Serena', 'Williams', 38],2: ['Bradley', 'Cooper', 45],3: ['Wendy', 'Williams', 56],4: ['Bill', 'Gates', 72], 5: ['Normani', 'Kordei', 24]}

我有一个带有列表作为值的字典,我试图访问说找到键 3 的年龄(列表中的索引 2)。我试过这个代码

def record(num):
    my_dict = {1: ['Serena', 'Williams', 38],2: ['Bradley', 'Cooper', 45],3: ['Wendy', 'Williams', 56],
               4: ['Bill', 'Gates', 72], 5:['Normani', 'Kordei', 24]}
    for k, v in my_dict.items():
        fname = v[0]
        lname = v[1]
        age = v[2]
        if my_dict.get(num) is None:
            print('Not found')
        else:
            print(num, age, 'Found')

record(3) # Call function

我想要一些东西,如果我用 record(3) 调用函数,我只会得到与该键对应的年龄,如下所示:

3 56 Found

目前我得到:

3 38 Found
3 45 Found
3 56 Found
3 72 Found
3 24 Found

2 个答案:

答案 0 :(得分:1)

你不需要使用循环,你可以直接索引到字典中。

def record(num):
    my_dict = {1: ['Serena', 'Williams', 38],2: ['Bradley', 'Cooper', 45],3: ['Wendy', 'Williams', 56],
               4: ['Bill', 'Gates', 72], 5:['Normani', 'Kordei', 24]}
    if num in my_dict:
        print(num, my_dict[num][2], "Found")
    else:
        print("Not found")

或者使用 try-except 来处理“未找到”的情况(有些人可能认为这更像是“Pythonic”):

def record(num):
    my_dict = {1: ['Serena', 'Williams', 38],2: ['Bradley', 'Cooper', 45],3: ['Wendy', 'Williams', 56],
               4: ['Bill', 'Gates', 72], 5:['Normani', 'Kordei', 24]}
    try:
        print(num, my_dict[num][2], "Found")
    except KeyError:
        print("Not found")

答案 1 :(得分:0)

SuperStormer's answer 中所述,您应该通过调用目录中的键直接访问 num 的记录。但是,使用您执行的迭代过程,要检查的正确项目是 k 是否与所需的键 num 匹配。

注意这种方法不推荐 - 这只是对您的方法的清理:

my_dict = {1: ['Serena', 'Williams', 38], 2: ['Bradley', 'Cooper', 45],
        3: ['Wendy', 'Williams', 56], 4: ['Bill', 'Gates', 72], 
        5:['Normani', 'Kordei', 24]}

def record(num):
    for k, v in my_dict.items():
        fname, lname, age = v
        if k == num:
            print(num, age, 'Found')
            return
    print (num, "Not found")  

for a in range(7):  # Call function repeatedly to check cases
    record(a)

上面对 record 的七次调用的输出是:

0 Not found
1 38 Found
2 45 Found
3 56 Found
4 72 Found
5 24 Found
6 Not found