【问题标题】:Do Dictionaries have a key length limit?字典有密钥长度限制吗?
【发布时间】:2014-03-17 20:40:49
【问题描述】:

我想知道 Python 是否对字典键的长度有限制。

为了澄清,我说的不是键的数量,而是每个键的长度。我将根据动态值(验证后)构建我的字典,但我不确定在这种情况下是否应该考虑长度。

【问题讨论】:

  • 只要密钥是可散列的,恕我直言,您应该不会遇到麻烦。
  • 当您说“长度”时,您是指字符串的长度吗?因为你可以有非字符串键,所以最好在内存大小方面问你的问题
  • 在这种情况下,我的意思是字符串长度。我知道你可以有非字符串键,但我认为这些限制可能是可比的。

标签: python dictionary


【解决方案1】:

对于字典键没有这样的限制。由于 python 在数字类型上也具有任意精度,因此您将遇到的唯一限制(字符串或其他)是可用内存的限制。您可以查看另一篇帖子 here,讨论有关 python 2 中最大字符串长度的讨论。

【讨论】:

    【解决方案2】:

    这里有一些示例代码:

    from string import ascii_letters
    from random import choice
    
    def make_str(length):
        return "".join(choice(ascii_letters) for i in range(length))
    
    test_dict = {make_str(10000000): i for i in range(5)}
    

    结论:Python 会很乐意使用 1000 万个字符的字符串作为 dict 键。

    【讨论】:

      【解决方案3】:

      据我所知没有限制,但考虑到密钥越长,创建/访问密钥的时间就越多

      【讨论】:

      • 如果您已经在内存中拥有对象,将其引用存储在字典中不会增加太多开销。并且散列密钥可能不取决于它的大小。
      • 我主要在字典中使用字符串键,我发现超过 30-40 个字符时性能略有下降
      • @l4mpi 是的,这或多或少与我的想法相同,但没有回答我为什么访问速度更慢。结果是,在可能的情况下,我尝试将最大 30 字符长度用于大型词典
      • @AlexF 我说可能不会;字符串散列确实涉及到字符串的长度,见effbot.org/zone/python-hash.htm
      猜你喜欢
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2015-10-22
      • 2013-08-03
      • 2011-05-26
      • 2012-12-22
      相关资源
      最近更新 更多