将字典值与同一字典中的所有其他值进行比较

时间:2017-09-30 15:11:16

标签: python dictionary

我有格式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被触发的次数。 将ab进行比较并将ba进行比较非常重要。

最好的方法是什么?

2 个答案:

答案 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)]
相关问题