如何按键对字典进行排序?
示例输入:
{2:3, 1:89, 4:5, 3:0}
期望的输出:
{1:89, 2:3, 3:0, 4:5}
如何按键对字典进行排序?
示例输入:
{2:3, 1:89, 4:5, 3:0}
期望的输出:
{1:89, 2:3, 3:0, 4:5}
当前回答
此函数将根据键对任何字典进行递归排序。也就是说,如果字典中的任何值也是一个字典,它也将根据它的键进行排序。如果您运行在CPython 3.6或更高版本上,则可以简单地更改为使用dict而不是OrderedDict。
from collections import OrderedDict
def sort_dict(d):
items = [[k, v] for k, v in sorted(d.items(), key=lambda x: x[0])]
for item in items:
if isinstance(item[1], dict):
item[1] = sort_dict(item[1])
return OrderedDict(items)
#return dict(items)
其他回答
来自Python的集合库文档:
>>> from collections import OrderedDict
>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> # dictionary sorted by key -- OrderedDict(sorted(d.items()) also works
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
有一种简单的方法来整理字典。
根据你的问题,
解决方案是:
c={2:3, 1:89, 4:5, 3:0}
y=sorted(c.items())
print y
(其中c是你的字典名。)
这个程序给出如下输出:
[(1, 89), (2, 3), (3, 0), (4, 5)]
如你所愿。
另一个例子是:
d={"John":36,"Lucy":24,"Albert":32,"Peter":18,"Bill":41}
x=sorted(d.keys())
print x
给出输出:['Albert', 'Bill', 'John', 'Lucy', 'Peter']
y=sorted(d.values())
print y
给出输出:[18,24,32,36,41]
z=sorted(d.items())
print z
给出输出:
[('Albert', 32), ('Bill', 41), ('John', 36), ('Lucy', 24), ('Peter', 18)]
因此,通过将其更改为键、值和项,您可以像您想要的那样打印。希望这能有所帮助!
就问题的表述方式而言,这里的大多数答案都是正确的。
然而,考虑到事情应该如何真正完成,考虑到几十年的计算机科学,让我完全惊讶的是,这里实际上只有一个答案(来自GrantJ用户)建议使用排序关联容器(sortedcontainers),它基于插入点的键对元素进行排序。
这将避免每次调用sort(…)时对性能的巨大影响(至少O(N*log(N)),其中N是元素的数量(逻辑上,这适用于这里建议使用sort(…)的所有此类解决方案)。考虑到对于所有这样的解决方案,sort(…)将需要在每次通过添加/删除元素修改后,当需要以排序方式访问集合时调用…
我发现对字典进行排序的一个简单方法是,根据要排序的字典的排序键:值项创建一个新字典。 如果你想对dict ={}排序,使用相关的方法检索它的所有项,使用sorted()函数对它们排序,然后创建新字典。
下面是使用字典理解的代码:
sorted_dict = {k:v for k,v in sorted(dict.items())}
字典本身并没有这样的排序条目,如果你想按某种顺序打印它们,这里有一些例子:
在Python 2.4及以上版本中:
mydict = {'carl':40,
'alan':2,
'bob':1,
'danny':3}
for key in sorted(mydict):
print "%s: %s" % (key, mydict[key])
给:
alan: 2
bob: 1
carl: 40
danny: 3
(Python低于2.4:)
keylist = mydict.keys()
keylist.sort()
for key in keylist:
print "%s: %s" % (key, mydict[key])
来源:http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/