【问题标题】:Do dictionaries in Python have a single repr value?Python 中的字典是否只有一个 repr 值?
【发布时间】:2009-10-21 23:50:34
【问题描述】:

question 中,有人建议在字典上调用 repr 是一种将其存储在另一个字典中的好方法。无论键的顺序如何,这将取决于 repr 是否相同。是这样吗?

PS。对原始问题最优雅的解决方案实际上是使用frozenset

【问题讨论】:

    标签: python


    【解决方案1】:

    不,将键添加到字典的顺序会影响内部数据结构。当两个项目具有相同的哈希值并最终在同一个桶中时,它们被添加到字典中的顺序很重要。

    >>> (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'}"
    

    【讨论】:

    • +1:请注意,即使具有不同哈希值的键也可以进入同一个桶。这取决于字典的实现。
    【解决方案2】:

    情况并非如此——键顺序是任意的。

    如果您想将字典用作键,则应将其转换为固定形式(例如排序的元组)。当然,这不适用于具有非哈希值的字典。

    【讨论】:

      【解决方案3】:

      如果要将字典存储在另一个字典中,则无需先进行任何转换。如果您想使用一个字典作为另一个字典的键,那么您需要将其转换为键/值元组的排序元组。

      【讨论】:

        猜你喜欢
        • 2014-09-16
        • 2018-08-05
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多