就像其他人指出的那样,字典有其自己的顺序,您不能像对列表那样对它们进行排序。
我想补充的一件事是,如果您只想按排序顺序浏览字典中的元素,那就是:
for k in sorted(a):
print k, a[k] # or whatever.
如果您希望列表理解(每个Alex):
sortedlist = [(k, a[k]) for k in sorted(a)]
我想指出的是,Alex的用法key=int
不适用于您的示例,因为您的键之一是'test'
。如果您真的希望他的数字在非数字之前排序,则必须传递一个cmp
函数:
def _compare_keys(x, y):
try:
x = int(x)
except ValueError:
xint = False
else:
xint = True
try:
y = int(y)
except ValueError:
if xint:
return -1
return cmp(x.lower(), y.lower())
# or cmp(x, y) if you want case sensitivity.
else:
if xint:
return cmp(x, y)
return 1
for k in sorted(a, cmp=_compare_keys):
print k, a[k] # or whatever.
或者,也许您对键足够了解,可以编写一个函数将其转换为排序正确的字符串(或其他对象):
# Won't work for integers with more than this many digits, or negative integers.
MAX_DIGITS = 10
def _keyify(x):
try:
xi = int(x)
except ValueError:
return 'S{0}'.format(x)
else:
return 'I{0:0{1}}'.format(xi, MAX_DIGITS)
for k in sorted(a, key=_keyify):
print k, a[k] # or whatever.
这将比使用cmp
函数快得多。