我有一本字典:
a = {'100':12,'6':5,'88':3,'test':34, '67':7,'1':64 }
我想根据键对这本字典进行排序,使其看起来像:
a = {'1':64,'6':5,'67':7,'88':3, '100':12,'test':34 }
最佳答案
就像其他人指出的那样,字典有自己的顺序,您不能像列表一样对它们进行排序。
我想补充的一件事是,如果您只想按排序顺序浏览字典的元素,那就是:
for k in sorted(a):
print k, a[k] # or whatever.
如果你更喜欢列表理解(per Alex):
sortedlist = [(k, a[k]) for k in sorted(a)]
我想指出亚历克斯对 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
函数要快得多。
关于python - 如何在 Python 中对具有键作为数字字符串的字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548000/