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]