如何在Python中对具有键作为数字字符串的字典进行排序

如何在Python中对具有键作为数字字符串的字典进行排序,第1张

如何在Python中对具有键作为数字字符串的字典进行排序

就像其他人指出的那样,字典有其自己的顺序,您不能像对列表那样对它们进行排序。

我想补充的一件事是,如果您只想按排序顺序浏览字典中的元素,那就是:

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
函数快得多。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630773.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存