我正在开发python 3.2.2。我花了3个多小时才把字典按键排序。我设法使它成为一个有2个参数成员的排序列表,但最终不能使它成为一个排序字典。
这就是我的想法:
myDic={10: 'b', 3:'a', 5:'c'}
sorted_list=sorted(myDic.items(), key=lambda x: x[0])
但不管怎样,我都不能把这个有序的列表做成字典。我该怎么做?谢谢!
发布于 2014-09-23 14:41:29
我不认为你想要OrderedDict。听起来您更喜欢SortedDict,这是一种按排序顺序维护其键的字典。sortedcontainers模块就提供了这样的数据类型。它是用纯Python编写的,快速的C实现,有100%的覆盖率和几个小时的压力。
使用pip可以很容易地安装:
pip install sortedcontainers
请注意,如果您不能pip install
,那么您可以简单地从开放源代码库中拉出源文件。
那么你的代码就是:
from sortedcontainers import SortedDict
myDic = SortedDict({10: 'b', 3:'a', 5:'c'})
sorted_list = list(myDic.keys())
sortedcontainers模块还维护了与其他流行实现的performance comparison。
发布于 2012-06-19 03:30:18
Python的普通dicts
不能以任何特定的顺序提供键/元素。为此,您可以使用collections
模块中的OrderedDict
类型。请注意,OrderedDict
类型仅保留插入顺序的记录。如果希望后续视图/迭代器每次都按顺序返回元素,则必须在初始化字典之前对条目进行排序。例如:
>>> 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
对象的格式按顺序打印数据,那么下面这样的内容就足够了:
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])))
这样的代码。
发布于 2018-08-23 18:33:24
使用Python 3.7,我可以做到这一点:
>>> myDic={10: 'b', 3:'a', 5:'c'}
>>> sortDic = sorted(myDic.items())
>>> print(dict(sortDic))
{3:'a', 5:'c', 10: 'b'}
如果你想要一个元组列表:
>>> myDic={10: 'b', 3:'a', 5:'c'}
>>> sortDic = sorted(myDic.items())
>>> print(sortDic)
[(3, 'a'), (5, 'c'), (10, 'b')]
https://stackoverflow.com/questions/11089655
复制相似问题