これはすでに答えられているに違いないと思いましたが、Googleやここでは何も見つかりませんでした.
一般に、Python 辞書の順序に依存できないことは承知しています。ただし、同じキーを持つ 2 つの辞書がある場合、値が同じ順序であることを信頼できますか?
浮動小数点数の2つの辞書を比較しようとしているので、使用できないので質問しますdict1==dict2
。私の関数は次のようになります。
def _compare_dict(self, d1, d2):
"""
Compares two dictionaries of floating point numbers
for equality.
"""
if d1.keys() != d2.keys():
return False
zipped = zip(d1.itervalues(), d2.itervalues())
return len(filter(lambda x: abs(x[0] - x[1]) > sys.float_info.epsilon, zipped)) == 0
これは危険なゲームですか?あるテストでは、次の順序が維持されているように見えました。
In [126]: d1={'a': 3, 'b': 2, 'c': 10}
In [127]: d2={'b': 10, 'c': 7, 'a': 2}
In [128]: d1
Out[128]: {'a': 3, 'b': 2, 'c': 10}
In [129]: d2
Out[129]: {'a': 2, 'b': 10, 'c': 7}
しかし、これが信頼できるものかどうかはわかりません。もちろん、浮動小数点数の 2 つの辞書を比較するための他のソリューションも歓迎します。