如何按数字顺序Python按键对字典进行排序

Jus*_*tin 19 python sorting dictionary

这是字典看起来像:

{'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40}  
Run Code Online (Sandbox Code Playgroud)

我想按数字顺序对字典进行排序,结果应该是:

{'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82} 
Run Code Online (Sandbox Code Playgroud)

我试过sorted(self.docs_info.items)但它不起作用.

Hen*_*ter 18

如果你只需要按键排序,那么你已经有了95%.假设您的字典似乎被调用docs_info:

for key, value in sorted(docs_info.items()): # Note the () after items!
    print(key, value)
Run Code Online (Sandbox Code Playgroud)

由于字典键总是唯一的,调用sorteddocs_info.items()(这是元组序列)等效于仅由键排序.

请记住,包含数字的字符串排序不直观!例如"11"比"小" "2".如果您需要按数字排序,我建议使用键int而不是str; 例如

int_docs_info = {int(k) : v for k, v in docss_info.items()}
Run Code Online (Sandbox Code Playgroud)

这当然只是改变了访问字典元素的顺序,这通常就足够了(因为如果你没有访问它,那么如果它被排序了又有什么关系?).如果由于某种原因你需要将dict本身"排序",那么你将不得不使用collections.OrderedDict,它会记住项目插入其中的顺序.所以你可以先对你的字典进行排序(如上所述),然后OrderedDict从排序的(键,值)对中创建一个:

sorted_docs_info = collections.OrderedDict(sorted(docs_info.items()))
Run Code Online (Sandbox Code Playgroud)


ely*_*ase 8

标准Python dicts是"无序的".你可以使用OrderedDict,看看文档:

from collections import OrderedDict

d = {'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40}
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
# OrderedDict([('57480', 89), ('57481', 50), ('57482', 18), ('57483', 110), ('57484', 40), ('57485', 82)])
Run Code Online (Sandbox Code Playgroud)


Gra*_*ntJ 5

如果重复排序元素并将它们插入有序的dict中太慢,请考虑PyPI上的一个已排序的dict实现.一个SortedDict数据类型有效地维持有序的钥匙.该sortedcontainers模块包含一个这样的实现.

从PyPI安装很简单:

pip install sortedcontainers
Run Code Online (Sandbox Code Playgroud)

如果你不能,pip install那么只需从开源存储库中复制sortedlist.py和sorteddict.py文件.SortedContainers在纯Python中实现,但是快速实现.

一旦安装简单:

In [1]: from sortedcontainers import SortedDict

In [6]: SortedDict({'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40})
Out[6]: SortedDict({'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82})
Run Code Online (Sandbox Code Playgroud)

sortedcontainers模块还维护了几个流行实现的性能比较.