我有一个原始词典:
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:key
OrderedDict:
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) ]
希望这有帮助。