如果我创建一个使用整数作为键的Python字典,我可以安全地假设对字典进行迭代将根据键值按顺序检索项目?
即将
my_dict = {}
for x in range(0,100):
my_dict[x] = str(x)
for item in my_dict.items():
print item
总是导致按键值顺序打印列表吗?
总之,不。我敢打赌,您注意到字典将键的哈希用作数组的索引,并且由于int哈希到其自身的值,因此您推断出,如果插入的值的键是整数,则插入的值将按键顺序结束。尽管该陈述的前两个部分是正确的,但推论不是正确的,即使作为未记录的副作用也是如此。 dict键是从键的哈希值中得出的,而不是完整的哈希值。这意味着即使使用整数键,由于2个值可能在同一位置发生冲突(甚至具有“乱序”的散列值),因此您仍然可以乱序插入,最终导致乱序地将键插入字典。[基本上,将其视为字典的内部存储阵列中的索引是键哈希中的一些低阶位。仅仅因为一个数字大于另一个数字并不意味着从其截断的低阶位构建的值将更大,甚至不同。
pandas
,这将允许字典使用类似的功能来按键值以及许多其他强大功能(http://pandas.pydata.org/pandas-docs/stable/10min.html)进行调用。 总是
collections.OrderedDict
以确保订购。但是,这将按照条目的添加顺序对其进行排序。