就像其他人指出的那样,字典有其自己的顺序,您不能像对列表那样对它们进行排序。
我想补充的一件事是,如果您只想按排序顺序浏览字典中的元素,那就是:
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 1for 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 = 10def _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函数快得多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)