我是Python的新手,我一直试图找出“间隔”,其中y值=<我有一个有序的字典条目:
d = {0: '92', 11: '70', 43: '77', 44: '76', 61: '77', 64: '69',
68: '67', 84: '68', 93: '87', 108: '81', 141: '74'}
我想编写一个函数,允许我根据y值=<的基于d的键(x值)来识别“间隔”(a,b). N.我的端点(a,b)应该是值开始下降和上升和下移N值的位置,因此实际端点值将“高于”N,但两者之间的条目应低于.
(a,b): {above, below, below, below, above}
例如,我对作为字典的区间感兴趣,这里N = 70:
{(0,43):{92,70,77}, (61,93): {77, 69, 67, 68, 87}} <-- includes the values at endpoints
但是,可以忽略那些值永远不会低于70的其他“间隔”
所以在这种情况下我们不需要:(43,41),(93,180)
有一个简单的方法吗?到目前为止,我已经能够识别出从“上方”变为“下方”70或反之亦然的点,但不确定如何继续创建间隔和值(例如在字典中).我想我已经盯着这个太久了.
解决方法:
以下代码应该为您提供所要求的输出:
oninterval = False
dd = {}
keys = d.keys()
keys.sort()
start_key, first_val = keys[0], d[keys[0]]
for k in keys:
v = float(d[k])
if oninterval:
cur_list.append(v)
if not int(v) <= 70: # interval ends
oninterval = False
dd[(start_key,k)] = cur_list
else:
if int(v) <= 70:
cur_list = [first_val, v]
oninterval = True
else:
start_key, first_val = k, v
if oninterval: dd[(start_key, keys[-1])] = cur_list
编辑:
扩展代码分数以接受第一个或最后一个项目以使y值<= 70并将y值视为浮点数