您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

如何在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 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 2022/1/1 18:51:09 有377人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶