字典对(Python)

我有一个ID为且随机生成年龄的字典。例如(年龄随机):

json = {0: {'age': 14},1: {'age': 23},2: {'age': 43},3: {'age': 29}

我有范围。例如[5; 20]。我想像这样遍历数组:

0->1,0->2,0->3   #FIX
1->2,1->3
2->3

我想检查它是否满足条件5 < abs(n-m) < 20

1)。 0和1:

if 5 < abs(json[0]['age']-json[1]['age']) < 20:
    pass

2)。 0和2:

if 5 < abs(json[0]['age']-json[2]['age']) < 20:
    pass

n)。 n与m:

if 5 < abs(json[n]['age']-json[m]['age']) < 20:
    pass

因此它们都应该在彼此的范围内。实际上,有多个范围,但是我认为一个示例就足够了。 我不太了解如何在Python中实现,请帮忙。 也许有帮助:

字典对(Python)

enter image description here

qq7068127 回答:字典对(Python)

一种代码方法应如下所示:

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

大家都在问