具有值列表理解的反向键也会随机化索引,我该如何解决这个问题?



我有一个原始词典:

my_dict = {'key1':''value1',
'key2':'value2',
'key3':'value3'}

基于它,我生成其反向键<->值,如下所示:

new_dict = {v: k for k, v in my_dict.iteritems()}

它确实将键交换为值,但它不是保持"有序顺序",而是像这样切换索引:

new_dict = {'key3':''value3',
'key2':'value2',
'key1':'value1'}

对我来说,他们必须呆在同一个地方。

我试图做collections.OrderedDict()但它对生成反向字典没有帮助。

我该怎么做?

您可以使用Orderdict

my_dict=OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])
for k, v in my_dict.items():
new_dict.update({v: k})
print(new_dict)

你会得到value:keyOrderedDict:

OrderedDict([('value1', 'key1'), ('value2', 'key2'), ('value3', 'key3')])

在python3.6中,dict有序的(在CPython实现下)。

dict() 现在使用由 PyPy 首创的"紧凑"表示。这 与新 dict() 相比,新 dict() 的内存使用量减少了 20% 到 25% 到 Python 3.5。PEP 468 (保留 **kwargs 的顺序 函数。由此实现。这其中的秩序保持方面 新实现被视为实现细节,应 不被依赖(将来可能会改变,但这是需要的 在语言中为少数人实现这个新的字典 在更改语言规范以强制保留顺序之前发布 所有当前和未来 Python 实现的语义;这也 有助于保持与旧版本 的向后兼容性 随机迭代顺序仍然有效的语言,例如 Python 3.5). (稻田直树在第27350期中提供。最初由Raymond Hettinger提出的想法。

顺便说一下,如果你需要顺序,并且想要反转key/value为什么不尝试元组列表,这样你就不用担心重复键的问题了:

[ (k1,v1), (k2,v2) ]

希望这有帮助。

最新更新