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

问题描述 投票:0回答:1

这个问题在这里已有答案:

我在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)
python python-3.x dictionary
1个回答
0
投票

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

有关详细信息,请参见此处:Are dictionaries ordered in Python 3.6+?

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

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

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