我搜索了基于价值的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')]
问题是,正如您所看到的,元组的前两个元素没有排序。其余元素根据值完美排序。 在这里找不到错误。任何帮助都会很棒。谢谢
答案 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然后排序,它将起作用。