从字典中返回特定键及其值

时间:2016-11-13 22:08:53

标签: python python-3.x dictionary find key

我正在编写一个函数,我需要分析一个字典并提取其中一个键及其所有值并返回它。

示例字典:

{'P':[("Eight",1460, 225.0, 200.0, "fresco","Netherlands"),
      ("Six",1465,81.0, 127.1, "tempera", "Netherlands")],
 'V':[("Four",1661, 148.0, 257.0,"oil paint", "Austria"),
      ("Two",1630, 91.0, 77.0, "oil paint","USA")],
 'K':[("Five",1922,63.8,48.1,"watercolor","USA"),
      ("Seven",1950,61.0,61.0,"acrylic paint","USA"),
      ("Two",1965,81.3,100.3,"oil paint","United Kingdom")],
 'C':[("Ten",1496,365.0,389.0,"tempera","Italy")],
 'U':[("Nine",1203,182.0, 957.0,"egg tempera","Italy"),
      ("Twelve",1200,76.2,101.6,"egg tempera","France")]}

因此,如果我的函数名为find_the_key并且我正在寻找'C'及其值,那么它将需要返回

find_the_key(dictionary2(),['C'])

return {'C': [('Ten', 1496, 365.0, 389.0, 'tempera','Italy')]}

如果需要同时找到'C'和'V',它将返回

find_the_key(dictionary2(),['C','V'])

return {'C': [('Ten', 1496, 365.0, 389.0, 'tempera', 'Italy')], 'V': [('Four',
1661, 148.0, 257.0, 'oil paint', 'Austria'), ('Two', 1630, 91.0, 77.0, 'oil
paint', 'USA')]}

我已经完成了从字典中提取密钥的一些研究,而且我当前的代码可能很接近。

def find_the_key(dictionary,thekey):
    for thekey in dictionary.keys():
      if dictionary[thekey] == targetkey:
        return key, targetkey

目前我收到的错误目标密钥未定义,但我认为我的逻辑是在正确的轨道上。有谁知道如何做到这一点?

3 个答案:

答案 0 :(得分:2)

def find_the_key(dictionary, target_keys):
    return {key: dictionary[key] for key in target_keys}

这使用字典理解,这只是建立字典的一种方便方法。你正在做的事情(在修复变量名之后)只会返回一个键和值的一对(一个元组)。如果你从一个循环返回,你只返回那一件事:循环不会继续并同时返回所有其他类似的东西。

答案 1 :(得分:1)

2种方法:

1)输入字典项上的循环每次都会扫描键列表中的键,好但是没有使用输入是字典的事实。如果键列表或输入字典很长,则可能需要一些时间(通过将键列表转换为set可能会稍微改善一下)

def find_the_key(dictionary,thekey):
    return {k:v for k,v in dictionary.items() if k in thekey}

2)不在字典中进行循环,而是在要求的密钥中,如果密钥列表&字典很大

def find_the_key(dictionary,thekey):
    return {k:dictionary[k] for k in thekey if k in dictionary}

小缺点:测试k是否属于,然后获取dictionary[k],哈希k两次

3)经典,没有listcomp,但只使用get

进行一次字典访问
def find_the_key(dictionary,thekey):
    d={}

    for k in thekey:
        v = dictionary.get(k)
        if k:
            d[k]=v
    return d

当然所有方法都会产生相同的结果

答案 2 :(得分:0)

使用filter函数的替代解决方案:
我故意在J内传递了一个不正确的密钥filter_keys来处理不同的案件

def find_the_key(dictionary, filter_keys):
    return dict(filter(lambda  i: i[0] in filter_keys, dictionary.items()))

print(find_the_key(dictionary, ['C','V','J']))

输出:

{'C': [('Ten', 1496, 365.0, 389.0, 'tempera', 'Italy')], 'V': [('Four', 1661, 148.0, 257.0, 'oil paint', 'Austria'), ('Two', 1630, 91.0, 77.0, 'oil paint', 'USA')]}