[英]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.