我想按值对字典进行排序。如果值相同,那么我想用键对它进行排序。
例如,如果我有字符串"苦涩黄油和黄油袋装,那么输出必须是[(黄油,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();
答案 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]