簡體   English   中英

在python公差范圍內的兩個字典中的元素進行優雅的比較

[英]Elegant comparison of elements in two dictionaries within tolerance in python

可以說我有以下兩個字典:

d1 = {'a' : 1.001, 'b' : 2.0002, 'c' : 3}
d2 = {'a' : 1.002, 'b' : 2,      'c' : 3, 'd' : 4}

將它們與某些公差進行比較的最優雅的方法是什么?

目前我有:

TOL = 0.001
different = False

for key in d1.keys():
    if abs(d1[key] - d2[key]) > TOL:
        different = True
        print "|{} - {}| > {}".format(d1[key], d2[key], TOL)
        break

但是感覺有點。

我認為您的解決方案不是太糟糕,但是我會遍歷d1和d2的鍵的交集以避免KeyError lambda函數也可以使事情變得更甜蜜。

d1 = {'a' : 1.001, 'b' : 2.0002, 'c' : 3}
d2 = {'a' : 1.002, 'b' : 2,      'c' : 3, 'd' : 4}
tol = 0.001
equals = lambda a, b: abs(a-b) < tol

# For loop with print
for key in set(d1.keys()) & set(d2.keys()):
    print '{} == {} is {} (tolerance: {})'.format(
        d1[key], d2[key], equals(d1[key], d2[key]), tol
    )

# 1.001 == 1.002 is False (tolerance: 0.001)
# 3 == 3 is True (tolerance: 0.001)
# 2.0002 == 2 is True (tolerance: 0.001)

# List comprehension with bools
print [equals(d1[key], d2[key]) for key in set(d1.keys()) & set(d2.keys())]

# [False, True, True]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM