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
中查找大于(但最接近)someListsomeList[-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
听起来