15 python
我有一个200,000项的字典(键是字符串,值是整数).
什么是打印项目的最佳/最pythonic方式,按降序值排序,然后按升序键(即2键排序)?
a={ 'keyC':1, 'keyB':2, 'keyA':1 }
b = a.items()
b.sort( key=lambda a:a[0])
b.sort( key=lambda a:a[1], reverse=True )
print b
>>>[('keyB', 2), ('keyA', 1), ('keyC', 1)]
Run Code Online (Sandbox Code Playgroud)
S.L*_*ott 17
你不能排序词典.您必须对项目列表进行排序.
以前的版本错了.如果有数值,则可以按相反顺序排序.这些就是这样做的.但这不是一般的.这只能起作用,因为值是数字.
a = { 'key':1, 'another':2, 'key2':1 }
b= a.items()
b.sort( key=lambda a:(-a[1],a[0]) )
print b
Run Code Online (Sandbox Code Playgroud)
这是另一种选择,使用显式函数而不是lambda和cmp而不是key选项.
def valueKeyCmp( a, b ):
return cmp( (-a[1], a[0]), (-b[1], b[0] ) )
b.sort( cmp= valueKeyCmp )
print b
Run Code Online (Sandbox Code Playgroud)
更通用的解决方案实际上是两种不同的排序
b.sort( key=lambda a:a[1], reverse=True )
b.sort( key=lambda a:a[0] )
print b
Run Code Online (Sandbox Code Playgroud)
data = { 'keyC':1, 'keyB':2, 'keyA':1 }
for key, value in sorted(data.items(), key=lambda x: (-1*x[1], x[0])):
print key, value
Run Code Online (Sandbox Code Playgroud)