Taj*_*ton 2 python floating-point dictionary hashmap
我认为这肯定已经得到了解答,但我在谷歌或这里找不到任何东西.
我知道,一般来说,你不能依赖Python字典的排序.但是,如果您有两个具有相同键的字典,您是否可以依赖于相同顺序的值?
我问,因为我试图比较浮点数的两个字典,所以我不能使用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
Run Code Online (Sandbox Code Playgroud)
这是一场危险的比赛吗?在一次测试中,订单似乎成立:
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}
Run Code Online (Sandbox Code Playgroud)
但我不知道这是否值得我依靠.当然,其他用于比较两个浮点数字典的解决方案也是受欢迎的.
根据字典的构建方式,您不能依赖它.
一些例子:
>>> a = dict.fromkeys(range(1000))
>>> b = dict.fromkeys(range(500,600))
>>> for i in range(500):
del a[i]
>>> for i in range(600,1000):
del a[i]
>>> all(i==j for i,j in zip(a,b))
False
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)
a是一个更大的哈希表,因为它已经为1000个对象分配了空间,而b只能容纳大约100个而不会增长一点.因此存储哈希的方式可以改变迭代顺序
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |