如果使用[some dict].items()
,它会生成一个元组列表:
>>> d={3:'three',35:'thirty five',100:'one hindred'}
>>> d
{35: 'thirty five', 3: 'three', 100: 'one hindred'}
>>> d.items()
[(35, 'thirty five'), (3, 'three'), (100, 'one hindred')]
元组在 Python 中是可排序的:
>>> sorted(d.items())
[(3, 'three'), (35, 'thirty five'), (100, 'one hindred')]
因此,您的字典会按照 Python 的默认排序顺序进行排序:
>>> lettersandnumbers = {'Z': 1, 'Y': 0, 'X': 1, 'W': 17, 'V': 4, 'U': 0,'T': 22, 'S': 21, 'R': 31, 'Q': 0, 'P': 12, 'O': 8,'N': 10, 'M': 29, 'L': 27, 'K': 14, 'J': 51, 'I': 7,'H': 14, 'G': 21, 'F': 12, 'E': 27, 'D': 40, 'C': 43,'B': 28, 'A': 34}
>>> sorted(lettersandnumbers.items())
[('A', 34), ('B', 28), ('C', 43), ('D', 40), ('E', 27), ('F', 12), ('G', 21), ('H', 14), ('I', 7), ('J', 51), ('K', 14), ('L', 27), ('M', 29), ('N', 10), ('O', 8), ('P', 12), ('Q', 0), ('R', 31), ('S', 21), ('T', 22), ('U', 0), ('V', 4), ('W', 17), ('X', 1), ('Y', 0), ('Z', 1)]
(如果所需的顺序与默认顺序不同,您可能需要使用 sorted 的key
参数。在这种情况下,默认值有效。)
然后,如果您想要一个保持此顺序的字典:
>>> from collections import OrderedDict
>>> od=OrderedDict(sorted(lettersandnumbers.items()))
>>> od.items()[0]
('A', 34)
>>> od.items()[-1]
('Z', 1)
但是有序字典是基于插入顺序的,所以如果你添加任何不是排序顺序的东西,它将是未排序的。
更好的是,避免制作不必要的 dict 副本,并在当前排序顺序中根据需要对 dict 进行迭代:
for k,v in sorted(d.items()):
# deal with the key and value in sorted order at that moment...
使用 Python 2,您需要使用 d.iteritems() 或者您将生成 2 个临时列表:1 个用于项目,1 个用于排序。使用 Py 3(或使用 Py 2 和 d.iteritems() 方法)只为排序生成 1 个临时列表。