在Python中对字典进行降序和升序排序

时间:2016-09-22 09:29:40

标签: python

我想按值对字典进行排序。如果值相同,那么我想用键对它进行排序。

例如,如果我有字符串"苦涩黄油和黄油袋装,那么输出必须是[(黄油,2),(a,1),(宽松,1),(苦, 1))。

我的下面的代码按降序排列字典。但我无法做第二部分,即如果值相同,那么我按升序排序键。

Dim xdoc As New XDocument();
xdoc = XDocument.Parse(myXML);

// Adding new element
xdoc.Element(<Your_Parent_Node_Name>).Add(new XElement("<New_Element_Name>", "<New_Element_Value>"));

// Deleting existing element
 xdoc.Descendants().Where(s =>s.Value == "<Element_To_Be_Removed>").Remove(); 

2 个答案:

答案 0 :(得分:2)

为此,您需要编写一个比较器,首先按计数对值进行排序,如果它们相等,则按键对值进行排序。

from collections import defaultdict


def count_words(s):
    def comparator(first, second):
        if first[1] > second[1]:
            return 1
        elif first[1] < second[1]:
            return -1

        if first[0] > second[0]:
            return -1
        elif first[0] == second[0]:
            return 0
        return 1

    words = s.split(" ")
    wordcount = defaultdict(int)

    for word in words:
        wordcount[word] += 1

    return sorted(wordcount.items(), cmp=comparator, reverse=True)


print count_words("bitter butter a c batter butter baggy")
  

[(&#39; butter&#39;,2),(&#39; a&#39;,1),(&#39; baggy&#39;,1),(&#39; batter&# 39;,1),(&#39;苦涩&#39;,1),(&#39; c&#39;,1)]

答案 1 :(得分:1)

我想这会有所帮助

s = { "A":1, "B":1,  "C":1, "D":0, "E":2, "F":0 }
rez = sorted(s.items(), key = lambda x: (x[1],x[0]))

结果是

[('D', 0), ('F', 0), ('A', 1), ('B', 1), ('C', 1), ('E', 2)]

如果您需要逆序,只需使用-x [1]而不是x [1]