【问题标题】:Will Dict Return Keys and Values in Same Order? [duplicate]Dict 会以相同的顺序返回键和值吗? [复制]
【发布时间】:2009-06-18 12:24:11
【问题描述】:

可能重复:
Python dictionary: are keys() and values() always the same order?

如果我在 python 中有一个字典,.keys 和 .values 会以相同的顺序返回相应的元素吗?

例如

foo = {'foobar' : 1, 'foobar2' : 4, 'kittty' : 34743}

对于它返回的键:

>>> foo.keys()
['foobar2', 'foobar', 'kittty']

现在 foo.values() 返回元素的顺序是否总是与其对应的键相同?

【问题讨论】:

    标签: python


    【解决方案1】:

    Python documentation 很难改进:

    键和值以非随机的任意顺序列出,在 Python 实现中有所不同,并且取决于字典的插入和删除历史。如果调用 items()keys()values()iteritems()iterkeys()itervalues() 而没有对字典进行干预修改,则列表将直接对应。这允许使用zip(): pairs = zip(d.values(), d.keys()). 创建(value, key) 对。iterkeys()itervalues() 方法具有相同的关系:pairs = zip(d.itervalues(), d.iterkeys()) 为对提供相同的值。创建相同列表的另一种方法是pairs = [(v, k) for (k, v) in d.iteritems()]

    因此,简而言之,“是”,但请注意,您不得在调用 keys() 和调用 values() 之间修改字典。

    【讨论】:

    • 完美我这样一个白痴。我完全错过了那个重点。 :(
    【解决方案2】:

    是的,他们会的

    请参阅Python doc 的文档:

    键和值以非随机的任意顺序列出,在 Python 实现中有所不同,并且取决于字典的插入和删除历史。如果 items()、keys()、values()、iteritems()、iterkeys() 和 itervalues() 在没有对字典进行干预修改的情况下被调用,则列表将直接对应。

    最好还是使用 dict.items()

    【讨论】:

      【解决方案3】:

      来自 Python 2.6 文档:

      键和值以非随机的任意顺序列出,在 Python 实现中有所不同,并且取决于字典的插入和删除历史。如果调用 items()keys()values()iteritems()iterkeys()itervalues() 而没有对字典进行干预修改,则列表将直接对应。这允许使用zip(): pairs = zip(d.values(), d.keys()) 创建(值,键)对。 iterkeys()itervalues() 方法具有相同的关系:pairs = zip(d.itervalues(), d.iterkeys()) 为对提供相同的值。创建相同列表的另一种方法是pairs = [(v, k) for (k, v) in d.iteritems()]

      我 99% 以上确定 Python 3.0 也会如此。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      相关资源
      最近更新 更多