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

标签 python

我有一本字典:

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/

相关文章:

python - 如何在 PyQT 中的类之间连接 pyqtSignal

python - 在 Python 中使用 gzip 或 zlib 缩小字符串 - 为什么我缺少 "H4sIAAAAAAAA/"位

Python FTP 文件名无效错误

python - 计算 Pandas 中行之间不同列的数量

jquery - web2py 将 python 嵌入到 jQuery 中

Python/应用引擎 : Get client browser information

python - docker 中的 django 迁移权限被拒绝

python - 使用 while 循环比较和修改 Series

Python最准确测量时间(毫秒)的方法

android - 处理 android 和 django 时使用什么日期格式?