我正在编写一个函数,我需要分析一个字典并提取其中一个键及其所有值并返回它。
示例字典:
{'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
目前我收到的错误目标密钥未定义,但我认为我的逻辑是在正确的轨道上。有谁知道如何做到这一点?
答案 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')]}