根据值对字典进行排序

时间:2015-07-14 06:06:03

标签: python sorting

我搜索了基于价值的Python字典排序,并在互联网上得到了各种答案。结果很少,最后使用了Sorted函数。 我已经简化了这个例子来说清楚。 我有一本字典,说:

temp_dict = {'1': '40', '0': '109', '3': '37', '2': '42', '5': '26', '4': '45', '7': '109', '6': '42'}

现在,要根据值对其进行排序,我执行了以下操作(使用Operator模块):

sorted_temp_dict = sorted(temp_dict.items(), key=operator.itemgetter(1))

我得到的结果是(结果是一个元组,对我来说很好):

[('0', '109'), ('7', '109'), ('5', '26'), ('3', '37'), ('1', '40'), ('2', '42'), ('6', '42'), ('4', '45')]

问题是,正如您所看到的,元组的前两个元素没有排序。其余元素根据值完美排序。 在这里找不到错误。任何帮助都会很棒。谢谢

3 个答案:

答案 0 :(得分:3)

这些都是排序的。它们是字符串,按字典顺序排序:' 1'是在' 2'等之前。

如果要按数值排序,则需要在键功能中转换为int。例如:

 var r=$("#dataTables-example").html();
 var copylast = $("#dataTables-example > tbody").html().clone().find('input').removeClass('pickupDiv').end().html();

答案 1 :(得分:3)

对它们进行排序,问题是元素为string,因此 -

'109' < '26'  # this is true, as they are string

尝试将int参数转换为key,您可以使用lambda,例如 -

>>> sorted_temp_dict = sorted(temp_dict.items(), key=lambda x: int(x[1]))
>>> sorted_temp_dict
[('5', '26'), ('3', '37'), ('1', '40'), ('6', '42'), ('2', '42'), ('4', '45'), ('7', '109'), ('0', '109')]

答案 2 :(得分:1)

问题是尝试使用str而不是int的值进行排序。如果您首先将值转换为int然后排序,它将起作用。