【问题标题】:dict(sorted(dictionary.items(), key=operator.itemgetter(1)) does not always return a ordered dict when the value is a list当值为列表时,dict(sorted(dictionary.items(), key=operator.itemgetter(1)) 并不总是返回有序的dict
【发布时间】:2020-12-29 23:45:11
【问题描述】:

我有一个字典:

count2:defaultdict(<class 'list'>, {'i': [3, 2, 2, 1], 'w': [2, 2], 'p': [2, 2], 'd': [2, 2], 'm': [2, 2], 'y': [2, 2, 2, 1], 'x': [2, 2, 4, 1], 'j': [2, 2], 'o': [2, 1], 'r': [2, 1]})

当我尝试使用排序时

ordered = dict(sorted(count2.items(), key=operator.itemgetter(1), reverse=True)) 

它并不总是像我想要的那样对其进行排序。 (该值必须具有最大的数字,然后下降)所以它返回:

orderedStart:{'i': [3, 2, 2, 1], 'x': [2, 2, 4, 1], 'y': [2, 2, 2, 1], 'w': [2, 2], 'p': [2, 2], 'd': [2, 2], 'm': [2, 2], 'j': [2, 2], 'o': [2, 1], 'r': [2, 1]}

除了x 应该在i 前面,因为4 &gt; 3 之外,一切都是正确的。 是不是某些索引的优先级更高?

为了方便用户,这里是一个使用相同代码的排序良好的列表示例。

之前:

count2:defaultdict(<class 'list'>, {'r': [2, 2, 2, 1], 'g': [2, 1], 'e': [3, 1], 'n': [5, 1], 't': [4, 1], 'i': [2, 1], 'o': [5, 1], 'm': [2, 1]})

之后:

{'n': [5, 1], 'o': [5, 1], 't': [4, 1], 'e': [3, 1], 'r': [2, 2, 2, 1], 'g': [2, 1], 'i': [2, 1], 'm': [2, 1]}

【问题讨论】:

    标签: python python-3.x list sorting dictionary


    【解决方案1】:

    您误解了 python 如何比较元组。您已要求它比较 [3, 2, 2, 1][2, 2, 4, 1]。因为 3 > 2,所以它是第一位的。

    Python 使用“字典比较”,这与您在字典中查找单词的方式相同。首先你比较第一个字母。如果它们不同,那么您就完成了;如果它们不同,请查看第二个字母。以此类推。

    【讨论】:

    • 这个肯定有很多重复的,但是我找不到。 “比较列表”查找有关比较列表元素的问题,“排序列表”查找有关排序列表内容的问题。
    • @Barmar 我也找不到它们。如果我能找到他们,这个问题可能就不存在了。
    • @Frank Yellin,有没有办法同时查找两个数字,只比较最大结果
    • @Pipassinsal 您可以按降序对列表进行排序并进行比较。
    【解决方案2】:

    当您比较列表时,它们会按字典顺序进行比较,因此第一个元素优先,然后是第二个,依此类推。如果您希望最大的列表元素优先,请比较已排序的列表。

    ordered = dict(sorted(count2.items(), key=lambda item: sorted(item[1], reverse=True), reverse=True)) 
    

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2015-04-12
      • 2022-11-17
      • 1970-01-01
      • 2012-06-17
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多