按键长度排序字典。Python 3.6

5

我想按键的长度对字典进行排序(首先是键最长的,最后是键最短的)

例如:

dictionary = {"aa" : 1, "aaaaaaa": 2, "aaa" : 3, "a": 4}

作为排序结果,必须是这样的:
{"aaaaaaa": 2, "aaa" : 3, "aa" : 1, "a": 4}

这里还有一个:链接 - Sheldore
需要注意的关键是,字典本质上是无序的!如果您特别需要有序字典,请查看OrderedDict。 - Paritosh Singh
3个回答

8

字典被认为是无序的,但Python的新版本(3.6+)记住插入顺序,因此您可以执行以下操作:

d = {"aa" : 1, "aaaaaaa": 2, "aaa" : 3, "a": 4}

new_d = {}
for k in sorted(d, key=len, reverse=True):
    new_d[k] = d[k]

print(new_d)
# {'aaaaaaa': 2, 'aaa': 3, 'aa': 1, 'a': 4}

2

由于字典是无序的键值存储,因此无法像传统方式一样进行“排序”。您可能需要使用多维列表。

>>> d = [["aa", 1], ["aaaaaaa", 2], ["aaa", 3], ["a", 4]]
>>> d
[['aa', 1], ['aaaaaaa', 2], ['aaa', 3], ['a', 4]]
>>> sorted(d, key=lambda l: len(l[0]), reverse=True)
[['aaaaaaa', 2], ['aaa', 3], ['aa', 1], ['a', 4]]

1
dic = {"aa" : 1, "aaaaaaa": 2, "aaa" : 3, "a": 4}
new_dic={}
k = list(dic.items())
k.sort(key=lambda x:len(x[0]),reverse=True)

for i in k :
    new_dic.update({i[0]:i[1]})

print(new_dic)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接