从字典的列表中找到一个元素并返回该键

2024-09-28 21:53:50 发布

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

如果我把someDictionary定义为

{'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60}

someList定义为

[51, 52, 53, 54, 55, 56]

如何在someDictionary中找到与someList中的元素匹配的键?现在,我假设不会有超过一场比赛。你知道吗

我想应该是这样的:

for k, v in someDictionary.items():
    if v == someList:
        myAnswer = k

给定上面的代码,myAnswer将是3

我需要做的第二部分是,如果someList不包含在someDictionary中的元素,那么在someDictionary中找到大于(但最接近)someListsomeList[-1]中最后一个元素的值

在这种情况下,我的答案是6


Tags: 答案代码in元素forif定义情况
3条回答

第一部分,在列表中找到具有字典值的键的列表。你知道吗

someDictionary = {'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60}
someList = [51, 52, 53, 54, 55, 56]

res = [key for key, value in someDictionary.items() if value in someList]

第二部分,如果第一部分没有结果,则查找最接近的较大值的键(继续):

if not res:
    res = min ([(value, key) for key, value in someDictionary.items() if value > max(someList) ])[1]

对于第一个问题,您只是使用了错误的运算符来检查值是否在someList

for k, v in someDictionary.items():
    if v in someList:
        myAnswer = k

关于第二个问题,您可以用这种方式扩展前面的代码

for k, v in someDictionary.items():
     if v in someList:
         myAnswer = k
         break
else:
     myAnswer = None
     for k, v in someDictionary.items():
         if v > someList[-1] and (myAnswer is None or v < someDictionary[myAnswer]):
             myAnswer = k

听起来你想要一个^{}

>>> from bidict import bidict  # pip install bidict
>>> d = bidict({'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60})
>>> d['3'] 55
>>> d.inv[55] '3'

这允许在任一方向上进行O(1)查找。现在,您可以在someList上循环并检查元素是否in d.inv有效。你知道吗

相关问题 更多 >