【发布时间】:2011-08-03 11:53:45
【问题描述】:
代码:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
这会打印出['a', 'c', 'b']。我不确定keys() 方法如何确定l 中关键字的顺序。但是,我希望能够以“正确”的顺序检索关键字。正确的顺序当然会创建列表['a', 'b', 'c']。
【问题讨论】:
-
如果 Python 字典和大多数字典一样,它们实际上是哈希表。除其他外,这意味着键的顺序不能保证甚至指定。特别是,它不会记住添加键的顺序。
-
@cHao:这实质上意味着如果您遍历字典中的元素,您的程序将是不确定的?
-
@HelloGoodbye:我不会走那么远;那里仍然有非常可预测的行为。每次完整迭代都会看到每个键/值对中的一个。在大多数语言中,您甚至每次都以相同的顺序看到它们。但是,除非文档保证特定顺序,否则您不应该指望它是您想要的顺序。 (某些语言(如 Perl)实际上会稍微随机化顺序 - 据称是出于安全原因,但我认为这实际上只是为了让你摆脱依赖未指定行为的习惯。:) 我不认为 Python 就是这么邪恶,但是呃……)
-
如果字典没有被修改,顺序将是相同的。从手册:“如果 items()、keys()、values()、iteritems()、iterkeys() 和 itervalues() 被调用而没有对字典进行干预修改,则列表将直接对应。这允许创建使用 zip() 的 (value, key) 对:pairs = zip(d.values(), d.keys())。"
-
@sfranky 我认为 steveayre 的意思是您使用提到的不同方法获得的内容之间的顺序是相同的,而不是与编写元素的顺序不同。
标签: python dictionary