我有一个像
这样的字典列表array[0] = {'id' : 123 , 'number' : 345 , 'zipcode' : 67890}
array[1] ...
我用过
array.sort(key=lambda k: k['number'] , reverse=True)
之前
array.sort(key= operator.itemgetter('number') , reverse=True)
排序有效但是,当我编号为
时3 34 3456 2 23 234556
排序不会改变顺序原因3(如果我理解处理)等于3(4)和3(3456)等...
是否有任何想法可以改进密钥或类似的东西以使其更好?
答案 0 :(得分:0)
您可以使用sorted而不是sort,t最常见的是将列表传递给sorted()函数,但实际上它可以将任何类型的可迭代集合作为输入。
sorted()函数可以通过可选参数自定义。 sorted()可选参数reverse = True,例如sorted(list,reverse = True),使其向后排序。
你尝试排序
print sorted(array, key=lambda k: k['number'] , reverse=True)
实施例。
strs = ['aa', 'BB', 'zz', 'CC']
print sorted(strs) ## ['BB', 'CC', 'aa', 'zz'] (case sensitive)
print sorted(strs, reverse=True) ## ['zz', 'aa', 'CC', 'BB']
答案 1 :(得分:0)
您需要将字符串作为要转换为int的值:
array.sort(key=lambda k: int(k['number']) , reverse=True)
排序数字字符串"2" > "100"
时。 Python逐字符地比较两个字符串,第一个更高的字符将被视为更大,或者如果所有字符都相同,直到较短字符串的长度,则较长的字符串将被视为更大。
您可以使用一个简单示例来查看行为:
In [1]: a = "123"
In [2]: b = "2"
In [3]: a > b
Out[3]: False
In [4]: int(a) > int(b)
Out[4]: True
答案 2 :(得分:-1)
尝试:
print sorted(array, key=lambda k: k['number'] , reverse=True)
答案 3 :(得分:-1)
我无法重现您遇到的问题,这是我的IDLE会话输出(Python 3,Windows 64位):
>>> array = []
>>> array.append({'id' : 123 , 'number' : 345 , 'zipcode' : 67890})
>>> array.append({'id' : 123 , 'number' : 3 , 'zipcode' : 67890})
>>> array.append({'id' : 123 , 'number' : 34 , 'zipcode' : 67890})
>>> array.append({'id' : 123 , 'number' : 3456 , 'zipcode' : 67890})
>>> array.sort(key=lambda item: item['number'], reverse=True)
>>> array
[{'zipcode': 67890, 'number': 3456, 'id': 123}, {'zipcode': 67890, 'number': 345, 'id': 123}, {'zipcode': 67890, 'number': 34, 'id': 123}, {'zipcode': 67890, 'number': 3, 'id': 123}]
你可以发布你的代码吗?
答案 4 :(得分:-1)
对我来说很好:
In [39]: x
Out[39]:
[{'id': 123, 'number': 345, 'zipcode': 67890},
{'id': 12, 'number': 35, 'zipcode': 6789},
{'id': 1211, 'number': 15, 'zipcode': 1789},
{'id': 90103, 'number': 1045, 'zipcode': 79890}]
In [40]: sorted(x, key=lambda k:k['number'], reverse=True)
Out[40]:
[{'id': 90103, 'number': 1045, 'zipcode': 79890},
{'id': 123, 'number': 345, 'zipcode': 67890},
{'id': 12, 'number': 35, 'zipcode': 6789},
{'id': 1211, 'number': 15, 'zipcode': 1789}]
In [41]: x.sort(key=lambda k:k['number'], reverse=True)
In [42]: x
Out[42]:
[{'id': 90103, 'number': 1045, 'zipcode': 79890},
{'id': 123, 'number': 345, 'zipcode': 67890},
{'id': 12, 'number': 35, 'zipcode': 6789},
{'id': 1211, 'number': 15, 'zipcode': 1789}]