【问题标题】:How can I find the dictionary with the most keys on my list?如何找到列表中键最多的字典?
【发布时间】:2020-08-21 08:22:11
【问题描述】:

我有一个包含字典的列表,我想获取包含最多键的字典。

我该怎么做,最有效的方法是什么?

对于列表:

myList = [
    {
        'foo':12,
        'bar':14,
        'ali':34,
        'met':45
    },
    {
        'moo':52
    },
    {
        'doo':6,
        'tar':84,
        'moo':52
    }
]

我想得到result = {'foo':12, 'bar':14, 'ali':34, 'met':45}

【问题讨论】:

  • “最”是什么意思?通过值的总和还是最大值?
  • 键的最大数量是什么意思,不同的键出现哪个值,所以相同的键也算?你说的最好是什么意思?你这样做的具体问题是什么?你有没有用谷歌词典找出你可以用它做什么?
  • 拥有最多的key,所以key count
  • 您有具体的问题,还是需要有人为您写这篇文章?
  • "dictionary with most keys" 你的意思是字典中元素的数量吗?

标签: python list dictionary data-structures


【解决方案1】:

好的,所以返回具有最大键数的字典的最短方法是:

result = max(myList, key=len)

【讨论】:

    【解决方案2】:

    我想说最好的方法是使用 max 函数和您自己设置的 key 参数。 key 参数是用于比较元素的函数。 在这里,如果您想比较字典的大小,您的函数将类似于

    def comp_func(dic) :
        return len(dic)
    

    然后你就可以像这样使用max函数了

    max_dict = max(myList, key=comp_func)
    

    你也可以使用 lambda 函数(我认为这是最好的解决方案)

    max_dict = max(myList, key=lambda dic: len(dic))
    

    编辑

    实际上,就像另一个答案所说,您不必为了使用len 而重新创建一个函数,所以最好的是

    max_dict = max(myList, key=len)
    

    【讨论】:

      【解决方案3】:

      这是另一种更冗长(但也许更直观)的方法:

      myList = [
          {
              'foo': 12,
              'bar': 14,
              'ali': 34,
              'met': 45
          },
          {
              'moo': 52
          },
          {
              'doo': 6,
              'tar': 84,
              'moo': 52
      
          }
      ]
      
      lengths = []
      
      for i, d in enumerate(myList):
          lengths.append(len(d.keys()))
      
      index = lengths.index(max(lengths))
      
      print(myList[index])
      

      【讨论】:

      • 更直观?我可能永远不会考虑为这样一个简单的任务增加额外的空间复杂度。
      • @VisioN 我认为你的答案是更好的答案。放松。
      • 我不会对 :) 争论,但更直观的可能是在循环之前引用最大的 dict,您将其与循环中的 len(d) 进行比较,而不是使用长度列表,即res = {}; for d in myList: if len(res) < len(d): res = d;
      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多