为什么 sorted(dictionary) 返回一个列表而不是字典?

JJW*_*W22 0 python sorting dictionary python-3.x

{'goofy': '818-399-2763', 'mickey': '213-333-2341', 'minnie': '510-540-2390', 'donald': '415-638-4433'}
Run Code Online (Sandbox Code Playgroud)

上面是字典phoneBook。如果我打印电话簿,我会得到整个字典,如下所示

>>>print (phoneBook)
{'goofy': '818-399-2763', 'mickey': '213-333-2341', 'minnie': '510-540-2390', 'donald': '415-638-4433'}
Run Code Online (Sandbox Code Playgroud)

但是在我对字典使用 sorted()phoneBook对其键进行排序并打印排序后的字典后,它不会返回带有排序键的整个字典,而是返回一个包含所有键的列表。

>>>print (sorted(phoneBook))
['donald', 'goofy', 'mickey', 'minnie']
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:除了键的顺序改变了之外,排序的字典还是字典吗?如果是这样,我们在打印 sorted(phoneBook) 后不应该得到如下输出吗?

phoneBook = {'donald': '415-638-4433', 'goofy': '818-399-2763', 'mickey': '213-333-2341', 'minnie': '510-540-2390'}
Run Code Online (Sandbox Code Playgroud)

而不是键列表?

Mos*_*oye 5

请记住,字典是无序的。所以你可以想象如果字典被排序并返回字典会发生什么。

要对字典键和值进行排序,您应该使用:

sorted(phoneBook.items())
Run Code Online (Sandbox Code Playgroud)

iterator对字典调用 an自然只会返回它的键列表。.items()确保返回键和值。

要在排序后保持顺序,请将生成的元组列表(由 返回sorted)放入OrderedDict

from collections import OrderedDict

phonebook_sorted = OrderedDict(sorted(phoneBook.items()))
Run Code Online (Sandbox Code Playgroud)