Python字典选择



我有一个字典,它的值表示一个数字范围:

{'1': [0, 11], '2': [12, 23], '3': [24, 35], '4': [36, 41], '5': [42, 47], '6': [48, 53], '7': [54, 58], '8': [59, 64], '9': [65, 70], '10': [71, None]}

如果我想搜索一个特定的值,比方说33。。。如何获取与包含索引的值范围相匹配的索引?

我希望返回索引3,因为在上面的示例中,33包含在keyPair'3': [24, 35]的24和35之间。

您的问题不清楚,但根据我的理解,这段代码可以工作。

test = {'1': [0, 11], 
'2': [12, 23], 
'3': [24, 35], 
'4': [36, 41], 
'5': [42, 47], 
'6': [48, 53], 
'7': [54, 58], 
'8': [59, 64], 
'9': [65, 70], 
'10': [71, None]}
objective_val = 33
for key, value in test.items():
if objective_val >= value[0] and objective_val <= value[1]:
print(key)

for key, value in test.items():
if objective_val in range(value[0],value[1]+1):
print(key)

如果其他int是您的i值,则更新以处理None:

i = 33
for k, v in d.items():
if None not in v:
if i in range(v[0],v[1]+1):
print(k)
elif i in v:
print(k)

这里有一个numpy解决方案

import numpy as np
d = {'1': [0, 11],
'2': [12, 23],
'3': [24, 35],
'4': [36, 41],
'5': [42, 47],
'6': [48, 53],
'7': [54, 58],
'8': [59, 64],
'9': [65, 70],
'10': [71, None]}
# get labels and bin edges
labels, bins = zip(*d.items())
# get bin boundaries in a form to use in digitize function
bin_boundaries = [bin[0] for bin in bins[:-1]] + [bins[-1][0], np.inf]
# get bin number as an offset
index = np.digitize(33, bin_boundaries) - 1
# the answer
labels[index]

假设此函数获取字典d和您要查找的值v

def find_range_key(d, v):
for key, vrange in d.items():
if vrange[0] <= v <= vrange[1]:
return key
return -1

最新更新