我有格式D = {a:[x1,y1], b[x2,y2],.....}
我编写了一个函数来将[x1,y1]
与[x2,y2]
进行比较,以便:
CompareVal([x1, y1], [x2, y2]):
if (x2 > x1) and (y2 < y1):
return 1
else:
return 0
我需要遍历整个字典,将每个键的值与所有其他键进行比较,从而节省return 1
被触发的总次数。最终结果是列表((a,n),(b,m)...)
,因此每个键都有return 1
被触发的次数。
将a
与b
进行比较并将b
与a
进行比较非常重要。
最好的方法是什么?
答案 0 :(得分:0)
您可以使用您的函数D
比较CompareVal
中的每对密钥,并将D
中每个密钥的分数保存到新字典D_results
,如下所示:< / p>
D_results = {}
for key1 in D.keys():
for key2 in D.keys():
if not key1 == key2:
key1_result = CompareVal(D[key1], D[key2])
# if key1 is not in D_results, make existing_result equal to 0
existing_result = D_results.get(key1, 0)
D_results[key1] = existing_result + 1
答案 1 :(得分:0)
单独的列表理解可以使用double来实现:
def compare_values(p1, p2):
if (p1[0] < p2[0]) and (p2[1] < p1[1]):
return 1
else:
return 0
a = { 'a': [0,60], 'b': [10,110], 'c':[20,100], 'd':[15,55], 'e':[12,108] }
output = [ (jk,sum([compare_values(jv, iv) for ik, iv in a.items() if ik != jk])) for jk, jv in a.items()]
print(output)
使用测试词典
a = { 'a': [2,40], 'b': [4,5], 'c':[5,4], 'd':[40,2] }
你得到这个输出
[('a', 3), ('b', 2), ('c', 1), ('d', 0)]