【问题标题】:Python - Find longest (most words) key in dictionaryPython - 在字典中查找最长(最多单词)键
【发布时间】:2010-12-01 04:18:31
【问题描述】:

有没有办法快速查询字典对象以找到单词最多的键(所有键都是字符串类型)?

即,如果具有最大键的项目有五个单词 {'this is the maximum key': 3},我如何快速查询 dict 并返回 int '5'?

最好, 乔治娜

【问题讨论】:

  • 它需要是 int,还是密钥本身可以接受?
  • 打平了怎么办?
  • 鉴于您接受的答案,我一定误解了您的问题的意图。但是,我坚持认为,如果您发现需要经常这样做,那么您选择的数据结构很差。

标签: python dictionary key


【解决方案1】:

这会给你钥匙:

max(d, key=lambda x: len(x.split()))

如果你想要尺寸:

max(len(x.split()) for x in d)

【讨论】:

    【解决方案2】:

    max of - 每个键的字数:

    max(len(k.split()) for k in d.keys())
    

    【讨论】:

    • 你速度很快!无需添加 '[' 和 ']'。 max(len(i.split()) for i in d.iterkeys()) 工作正常
    • @mshsayem 我为他删除了 em
    【解决方案3】:
    longest=max(d.keys(), key=lambda s:len(s.split()))
    len(longest.split())
    

    【讨论】:

      【解决方案4】:
      max(len(i.split()) for i in d.iterkeys())
      

      【讨论】:

        【解决方案5】:

        答案是否定的。

        如果您想知道是否有可以快速输入的解决方案,那么请务必查看其他回复。但是它们中的任何一个都不会在大型词典上快速运行,我相信这是您问题的精神。

        如果这确实是您需要经常做的事情,您应该修改代码中从字典中添加和删除键的点,以便它们也维护一堆键,按字数排序。

        【讨论】:

          【解决方案6】:

          如果你能保证……

          • 没有前导或尾随空格
          • 单词之间正好用一个空格隔开

          计数

          max(key.count(' ') for key in d) + 1
          
          • 分配的新对象几乎为零,一个迭代器和一些整数
          • 这使用更少的内存,几乎是使用拆分的速度的两倍。

          如果你不能......

          拆分

          max(len(key.split()) for key in d)
          
          • 接受不规则的键值
          • 虽然是 count 方法的 1/2,但并不慢。

          【讨论】:

            【解决方案7】:

            没有捷径。简单的方法:

            import re
            max([len(re.split('\s+', k)) for k in d.keys()])
            

            【讨论】:

              猜你喜欢
              • 2011-07-21
              • 1970-01-01
              • 2014-05-04
              • 2018-03-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多