首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >排序字典python 3

排序字典python 3
EN

Stack Overflow用户
提问于 2012-06-19 03:25:44
回答 8查看 128.7K关注 0票数 46

我正在开发python 3.2.2。我花了3个多小时才把字典按键排序。我设法使它成为一个有2个参数成员的排序列表,但最终不能使它成为一个排序字典。

这就是我的想法:

代码语言:javascript
复制
myDic={10: 'b', 3:'a', 5:'c'}
sorted_list=sorted(myDic.items(), key=lambda x: x[0])

但不管怎样,我都不能把这个有序的列表做成字典。我该怎么做?谢谢!

EN

回答 8

Stack Overflow用户

发布于 2014-09-23 14:41:29

我不认为你想要OrderedDict。听起来您更喜欢SortedDict,这是一种按排序顺序维护其键的字典。sortedcontainers模块就提供了这样的数据类型。它是用纯Python编写的,快速的C实现,有100%的覆盖率和几个小时的压力。

使用pip可以很容易地安装:

代码语言:javascript
复制
pip install sortedcontainers

请注意,如果您不能pip install,那么您可以简单地从开放源代码库中拉出源文件。

那么你的代码就是:

代码语言:javascript
复制
from sortedcontainers import SortedDict
myDic = SortedDict({10: 'b', 3:'a', 5:'c'})
sorted_list = list(myDic.keys())

sortedcontainers模块还维护了与其他流行实现的performance comparison

票数 18
EN

Stack Overflow用户

发布于 2012-06-19 03:30:18

Python的普通dicts不能以任何特定的顺序提供键/元素。为此,您可以使用collections模块中的OrderedDict类型。请注意,OrderedDict类型仅保留插入顺序的记录。如果希望后续视图/迭代器每次都按顺序返回元素,则必须在初始化字典之前对条目进行排序。例如:

代码语言:javascript
复制
>>> myDic={10: 'b', 3:'a', 5:'c'}
>>> sorted_list=sorted(myDic.items(), key=lambda x: x[0])
>>> myOrdDic = OrderedDict(sorted_list)
>>> myOrdDic.items()
[(3, 'a'), (5, 'c'), (10, 'b')]
>>> myOrdDic[7] = 'd'
>>> myOrdDic.items()
[(3, 'a'), (5, 'c'), (10, 'b'), (7, 'd')]

如果你想为新添加的项目保持适当的排序,你真的需要使用不同的数据结构,例如,二叉树/堆。这种构建排序列表并使用它初始化新OrderedDict()实例的方法效率非常低,除非您的数据是完全静态的。

编辑:因此,如果对数据进行排序的目的仅仅是以一种类似于python dict对象的格式按顺序打印数据,那么下面这样的内容就足够了:

代码语言:javascript
复制
def pprint_dict(d):
    strings = []
    for k in sorted(d.iterkeys()):
        strings.append("%d: '%s'" % (k, d[k]))
    return '{' + ', '.join(strings) + '}'

请注意,此函数对于键、值对的类型并不灵活(即,它希望键是整数,而相应的值是字符串)。如果你需要更多的灵活性,可以使用像strings.append("%s: %s" % (repr(k), repr(d[k])))这样的代码。

票数 11
EN

Stack Overflow用户

发布于 2018-08-23 18:33:24

使用Python 3.7,我可以做到这一点:

代码语言:javascript
复制
>>> myDic={10: 'b', 3:'a', 5:'c'}
>>> sortDic = sorted(myDic.items())
>>> print(dict(sortDic))
{3:'a', 5:'c', 10: 'b'}

如果你想要一个元组列表:

代码语言:javascript
复制
>>> myDic={10: 'b', 3:'a', 5:'c'}
>>> sortDic = sorted(myDic.items())
>>> print(sortDic)
[(3, 'a'), (5, 'c'), (10, 'b')]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11089655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档