【发布时间】:2009-10-21 23:50:34
【问题描述】:
在question 中,有人建议在字典上调用 repr 是一种将其存储在另一个字典中的好方法。无论键的顺序如何,这将取决于 repr 是否相同。是这样吗?
PS。对原始问题最优雅的解决方案实际上是使用frozenset
【问题讨论】:
标签: python
在question 中,有人建议在字典上调用 repr 是一种将其存储在另一个字典中的好方法。无论键的顺序如何,这将取决于 repr 是否相同。是这样吗?
PS。对原始问题最优雅的解决方案实际上是使用frozenset
【问题讨论】:
标签: python
不,将键添加到字典的顺序会影响内部数据结构。当两个项目具有相同的哈希值并最终在同一个桶中时,它们被添加到字典中的顺序很重要。
>>> (1).__hash__()
1
>>> (1 << 32).__hash__()
1
>>> repr({1: 'one', 1 << 32: 'not one'})
"{1: 'one', 4294967296L: 'not one'}"
>>> repr({1 << 32: 'not one', 1: 'one'})
"{4294967296L: 'not one', 1: 'one'}"
【讨论】:
情况并非如此——键顺序是任意的。
如果您想将字典用作键,则应将其转换为固定形式(例如排序的元组)。当然,这不适用于具有非哈希值的字典。
【讨论】:
如果要将字典存储在另一个字典中,则无需先进行任何转换。如果您想使用一个字典作为另一个字典的键,那么您需要将其转换为键/值元组的排序元组。
【讨论】: