Python中的字典有唯一的repr值吗?
在这个问题中,有人提到用字典的repr(表示形式)来存储在另一个字典里是个不错的主意。这种方法的前提是,不管字典里的键是怎么排列的,repr的结果都是一样的。这样说是否正确呢?
另外,解决原始问题的最优雅的方法其实是使用frozenset。
3 个回答
0
如果你想把一个字典放到另一个字典里,其实不需要做任何特别的处理。如果你想用一个字典作为另一个字典的键,那你就需要先把它转换一下,最好是把它变成一个有序的元组,里面包含键值对的元组。
2
情况并不是这样——键的顺序是随意的。
如果你想用字典作为键,那么需要把它转换成一种固定的形式(比如说,变成一个排序过的元组)。当然,这样做对那些里面有不能被哈希的值的字典是行不通的。
7
不,添加键到字典的顺序会影响它内部的数据结构。当两个项目有相同的哈希值并且被放在同一个桶里时,它们被添加到字典的顺序就变得很重要了。
>>> (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'}"