一种代码方法应如下所示:
def checkRange(bottom,top,data):
lastkey=list(data.keys())[-1]
for key in data.keys():
for x in range(key+1,lastkey+1):
if bottom<abs(data[key]['age']-data[x]['age']) < top:
pass
else:
print(key,x)
data = {0: {'age': 14},1: {'age': 23},2: {'age': 43},3: {'age': 29}}
checkRange(5,20,data)
您可以选择做什么而不是打印或通过!
,
我认为itertools.combinations
是为此目的而设计的。您可以详细阅读文档:itertools
根据您的情况,可以通过以下方式调用它:
import itertools as it
a=list(it.combinations(json,2))
如果打印a
,则可以清楚地看到其所需的索引组合:
[(0,1),(0,2),3),(1,(2,3)] # print (a)
# what you want
0->1,0->2,0->3 #FIX
1->2,1->3
2->3
然后计算并打印两个项目之间的绝对差:
for item in a:
print (abs(json[item[0]]['age']-json[item[1]]['age']) )
输出为:
9
29
15
20
6
14
或者,您可以缩短代码并检查范围:
for i in it.combinations(json,2):
v=abs(json[i[0]]['age']-json[i[1]]['age'])
if v in range(5+1,20):
pass
else:
print ('False',i,'age:',v )
输出:
False (0,2) age: 29
False (1,2) age: 20
,
这可以使用一个衬套来完成,使用任何要检查的范围:
range_check = range(5,21) # Range second arg is exclusive
# Get answer as a bool value
res = all(abs(json[i]['age'] - json[j]['age']) in range_check
for i in range(len(json)) for j in range(i-1,-1,-1))
当然,这是假设您的dict
如示例中所示,其中每个元素的键是其索引。
对于不管密钥如何都可以使用的更通用的方法,可以将密钥存储为元组或列表:
range_check = range(5,21) # Range second arg is exclusive
keys = tuple(json.keys())
# Get answer as a bool value
res = all(abs(json[key1]['age'] - json[key2]['age']) in range_check
for i,key1 in enumerate(keys) for key2 in keys[:i])
print(res)
本文链接:https://www.f2er.com/2421047.html