如何修复Python 3中字典处理的顺序?

SmC*_*lar 1 python hash dictionary python-3.3 python-3.4

有没有办法可靠地修复Python 3中字典处理的顺序,即以可预测的顺序建立对键和值的迭代?

出于调试目的和重现故障,据说是基于python 3.3和3.4中的字典访问,我需要以某种方式使字典上的迭代可预测.我的意思是我想修复在Python程序开始时执行任何迭代的方式.这样启动程序多次,来电dict.items(),dict.keys(),dict.values()始终把生产要素的顺序相同.更重要的是,通过设置哈希函数的某种种子值来改变这个顺序会很好.我怎样才能做到这一点?

这是唯一的调试,我不想和不能使用类似sorted(dict.keys())OrderedDict.谢谢!

juh*_*ist 7

你应该看看PYTHONHASHSEED环境变量:

https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED

将其设置为固定的整数,然后您的散列种子是确定性的.

  • 只是确保你不要在生产中这样做. (3认同)
  • 不,这是错过了重点.它是随机的,这是为了防止依赖于可预测的字典顺序的各种攻击; 例如,[这里]描述的那种DoS漏洞利用(http://www.ocert.org/advisories/ocert-2011-003.html). (3认同)