旧版 Python 中字典中键的顺序

密码:

d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()


print l

这个打印 ['a', 'c', 'b']。我不确定方法 keys()是如何确定 中关键字的顺序的。但是,我希望能够以“适当”的顺序检索关键字。正确的顺序当然会创建列表 ['a', 'b', 'c']

175233 次浏览

当你想要使用它的时候,只需要对列表进行排序。

l = sorted(d.keys())

来自 http://docs.python.org/tutorial/datastructures.html:

Dictionary 对象的 keys ()方法以任意顺序返回 dictionary 中使用的所有键的列表(如果希望对其进行排序,只需对其应用排序()函数)

>>> print sorted(d.keys())
['a', 'b', 'c']

使用 排序函数对传入的可迭代文件进行排序。

.keys()方法以任意顺序返回键。

您可以使用 命令(需要 Python 2.7)或更高版本。

另外,请注意,由于使用 {...}创建的 dict已经忘记了元素的顺序,因此 OrderedDict({'a': 1, 'b':2, 'c':3})不能正常工作。相反,您希望使用 OrderedDict([('a', 1), ('b', 2), ('c', 3)])

正如文档中提到的,对于低于 Python 2.7的版本,可以使用 这个菜谱。

Python 3.7 +

在 Python 3.7.0中,dict对象 已经宣布的插入顺序保留特性是 Python 语言规范的正式部分。因此,你可以依靠它。

Python 3.6(CPython)

在 Python 3.6中,对于 Python 的 CPython 实现,默认情况下是 dictionary 保持插入顺序。不过,这被认为是一个实现细节; 如果您希望在 Python 的其他实现中保证插入顺序,那么仍然应该使用 collections.OrderedDict

Python > = 2.7和 < 3.6

当你需要一个 dict的时候使用 collections.OrderedDict类 记住插入项的顺序。

虽然顺序并不重要,因为字典是散列表。这取决于它被推入的顺序:

s = 'abbc'
a = 'cbab'


def load_dict(s):
dict_tmp = {}
for ch in s:
if ch in dict_tmp.keys():
dict_tmp[ch]+=1
else:
dict_tmp[ch] = 1
return dict_tmp


dict_a = load_dict(a)
dict_s = load_dict(s)
print('for string %s, the keys are %s'%(s, dict_s.keys()))
print('for string %s, the keys are %s'%(a, dict_a.keys()))

产出:
对于字符串 abbc,键是 dict _ keys ([‘ a’,‘ b’,‘ c’])
对于 string cbab,密钥是 dict _ keys ([‘ c’,‘ b’,‘ a’])