Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字典中的列表中查找元素并返回该键_Python_Python 3.x_List_Dictionary_Python 2.x - Fatal编程技术网

Python 从字典中的列表中查找元素并返回该键

Python 从字典中的列表中查找元素并返回该键,python,python-3.x,list,dictionary,python-2.x,Python,Python 3.x,List,Dictionary,Python 2.x,如果我有someDictionary定义为 {'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60} [51, 52, 53, 54, 55, 56] 和someList定义为 {'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60} [51, 52, 53, 54, 55, 56] 如何在someDictionary中找到与someList中的元素匹配的键?现在,我假设不会有超过一场

如果我有
someDictionary
定义为

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

{'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60}
[51, 52, 53, 54, 55, 56]
如何在
someDictionary
中找到与
someList
中的元素匹配的键?现在,我假设不会有超过一场比赛

我想应该是这样的:

for k, v in someDictionary.items():
    if v == someList:
        myAnswer = k
根据上面的代码,
myAnswer
将是
3

我需要做的第二部分是,如果someList不包含
someDictionary
中的元素,则在
someDictionary
中查找大于(但最接近)someList
someList[-1]


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

第一部分,在列表中查找具有字典值的键列表

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]
第二部分,如果第一部分没有结果,则查找具有最接近的较大值的键(继续):


第一部分,查找列表中具有字典值的键的列表

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]
第二部分,如果第一部分没有结果,则查找具有最接近的较大值的键(继续):

myAnswer=''
最接近=某个列表[-1]
最近的_diff=0
对于someDictionary中的k:
如果someList中的someDictionary[k]:
myAnswer=k
中断;#找到精确匹配时停止循环
diff=someDictionary[k]-最接近
如果差异>0且差异<最近的_差异:
最近的_diff=diff
myAnswer=k#这将保存较大但最接近someList中最后一个数字的键
myAnswer=''
最接近=某个列表[-1]
最近的_diff=0
对于someDictionary中的k:
如果someList中的someDictionary[k]:
myAnswer=k
中断;#找到精确匹配时停止循环
diff=someDictionary[k]-最接近
如果差异>0且差异<最近的_差异:
最近的_diff=diff
myAnswer=k#这将保存较大但最接近someList中最后一个数字的键

首先使用列表理解来收集值在
lst
中的所有键,如果不匹配,则过滤值大于
lst[-1]
的键。根据键值与
lst
中最后一项的差值的abs值对它们进行排序后,取
0
索引中最接近的项

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

my_answer = [int(i) for i in dct if dct[i] in lst]
if my_answer:
    print(*my_answer) # => 3
else:
    close = [i for i in dct if int(dct[i]) > max(lst)]
    closest = sorted(close, key=lambda x: abs(dct.get(x) - lst[-1]))[0]
    print(closest) # => 6

首先使用列表理解收集值在
lst
中的所有键,如果不匹配,则过滤值大于
lst[-1]
的键。根据键值与
lst
中最后一项的差值的abs值对它们进行排序后,取
0
索引中最接近的项

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

my_answer = [int(i) for i in dct if dct[i] in lst]
if my_answer:
    print(*my_answer) # => 3
else:
    close = [i for i in dct if int(dct[i]) > max(lst)]
    closest = sorted(close, key=lambda x: abs(dct.get(x) - lst[-1]))[0]
    print(closest) # => 6
如何在
someDictionary
中找到与中的元素匹配的键
someList

字典用于将键映射到值。在O(1)时间内不可能实现相反的结果。但您可以在O(n)时间内进行迭代,直到可以将列表元素与字典值匹配为止

为此,您可以使用一个简单的
for
循环,迭代字典或列表

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

def find_key_dict(d, L):
    L_set = set(L)  # convert to set for O(1) lookup
    for k, v in d.items():
        if v in L_set:
            return k

def find_key_list(d, L):
    d_rev = {v: k for k, v in d.items()}  # reverse dict for value -> key map
    for i in L:
        if i in d_rev:
            return d_rev[i]

find_key_dict(d, L)  # '3'
find_key_list(d, L)  # '3'
也可以使用
next
将这些函数重写为单线生成器表达式,但这并不一定更有效

我需要做的第二部分是,如果
someList
不包含 元素,在
someDictionary
中查找值 大于(但最接近)someList中的最后一个元素

for k, v in someDictionary.items():
    if v in someList:
        myAnswer = k
您可以使用
为…编写类似的函数。。。否则…
最小值构建:

def find_key_dict(d, L):
    L_set = set(L)  # convert to set for O(1) lookup
    for k, v in d.items():
        if v in L_set:
            return k
    else:
        def min_func(x):
            diff = x[1] - L[-1]
            return diff <= 0, diff
        return min(d.items(), key=min_func)[0]

find_key_dict(d, L)  # '6'
def find_key_dict(d,L):
L_set=set(L)#转换为set进行O(1)查找
对于d.项()中的k,v:
如果v在L_集合中:
返回k
其他:
定义最小函数(x):
差异=x[1]-L[-1]
回差
如何在
someDictionary
中找到与中的元素匹配的键
someList

字典用于将键映射到值。在O(1)时间内不可能实现相反的结果。但您可以在O(n)时间内进行迭代,直到可以将列表元素与字典值匹配为止

为此,您可以使用一个简单的
for
循环,迭代字典或列表

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

def find_key_dict(d, L):
    L_set = set(L)  # convert to set for O(1) lookup
    for k, v in d.items():
        if v in L_set:
            return k

def find_key_list(d, L):
    d_rev = {v: k for k, v in d.items()}  # reverse dict for value -> key map
    for i in L:
        if i in d_rev:
            return d_rev[i]

find_key_dict(d, L)  # '3'
find_key_list(d, L)  # '3'
也可以使用
next
将这些函数重写为单线生成器表达式,但这并不一定更有效

我需要做的第二部分是,如果
someList
不包含 元素,在
someDictionary
中查找值 大于(但最接近)someList中的最后一个元素

for k, v in someDictionary.items():
    if v in someList:
        myAnswer = k
您可以使用
为…编写类似的函数。。。否则…
最小值构建:

def find_key_dict(d, L):
    L_set = set(L)  # convert to set for O(1) lookup
    for k, v in d.items():
        if v in L_set:
            return k
    else:
        def min_func(x):
            diff = x[1] - L[-1]
            return diff <= 0, diff
        return min(d.items(), key=min_func)[0]

find_key_dict(d, L)  # '6'
def find_key_dict(d,L):
L_set=set(L)#转换为set进行O(1)查找
对于d.项()中的k,v:
如果v在L_集合中:
返回k
其他:
定义最小函数(x):
差异=x[1]-L[-1]

return diff对于第一个问题,您只是使用了错误的运算符来检查值是否位于
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
someDictionary.items()中k,v的

如果v在someList中:
myAnswer=k
打破
其他:
myAnswer=无
对于someDictionary.items()中的k,v:
如果v>someList[-1]和(myAnswer为None或v
对于第一个问题,您只是使用了错误的运算符来检查值是否位于
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
someDictionary.items()中k,v的

如果v在someList中:
myAnswer=k
打破
其他:
myAnswer=无
对于someDictionary.items()中的k,v:
如果v>someList[-1]和(myAnswer为None或v
听起来