如果有两个不同的词典具有相同的键,键序是否始终相同?

时间:2018-02-24 17:22:19

标签: python python-3.x dictionary

我在python 3中有以下词典。两个词典都有相同的键和顺序,即'a', 'z', 'foo', 'b'。但每个人都有不同的价值。 我确认两个关键订单总是一样的。但它取决于环境吗?我知道我们通常无法修复密钥的顺序。我想知道具有相同键的不同词典的键顺序'

dic1 = {'a': 0, 'z': 2, 'foo': 0, 'b': 0}
dic2 = {'a': 1, 'z': 0, 'foo': 8, 'b': 7}

for k, v in dic1.items():
    print(k, v)

for k, v in dic2.items():
    print(k, v)

1 个答案:

答案 0 :(得分:0)

在Python 3.7之前,键的顺序不保证是稳定的。但是,在Python 3.7及更高版本中,保证按照最初添加到dict的顺序返回密钥。

请点击此处了解详情:Are dictionaries ordered in Python 3.6+?

如果您希望在早期版本的Python中进行稳定排序,可以使用collections.OrderedDict

请注意,OrderedDict和后来的Python dict不会根据键本身的任何属性(例如按字母顺序)对键进行排序,因此这些都不符合您使用相同键进行切换的标准总是以相同的顺序返回它们。如果你想要,你有几个选择:

  • 在使用(sorted(dct.keys())
  • 之前对键进行排序
  • 将键添加到一个结构中,以便在将它们添加到词典时对其进行排序(例如heapq
  • 定义任意主顺序并将其用于所有dicts(例如[f(d1[k], d2[k]) for k in d1]
  • 使用SortedDict包中的sortedcontainers类:http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html