Python字典选择
我有一个字典,其值表示一个数字范围:Python字典选择,python,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包含在键对'3':[24,35
{'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包含在键对
'3':[24,35]
中的24和35之间。假设此函数接受一个字典d
和您要查找的值v
def find_range_key(d, v):
for key, vrange in d.items():
if vrange[0] <= v <= vrange[1]:
return key
return -1
def find_range_键(d,v):
对于键,在d.items()中设置vrange:
如果vrange[0]更新为处理None(如果另一个int是您的i值):
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)
您的问题不清楚,但根据我的理解,此代码将起作用
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)
这里有一个简单的解决方案
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]
为什么输入为33时输出为3?您是说要在字典中搜索一个值,然后返回与该值关联的键?旁注:字典没有索引。不清楚您是在谈论字典中列表的索引还是字典的键。是的,这是正确的,它们是值的范围,我只是在发现错误时更新它。例如,33在24-35范围内,因此返回索引3。这似乎是一个简单的练习,那么您在代码中是如何以及在哪里被卡住的?如果您不共享代码,我们将无法帮助您。我将打赌这会引发错误,因为您没有调用.items()
是的,现在已修复。键的行,test.items()中的值:
将迭代字典中的每个键,然后if语句检查它是否在每个范围内,然后在满足条件时打印该键。
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]