我有一个原始词典:
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()
,但它并没有帮助产生颠倒的字典。
我该怎么做?
答案 0 :(得分:1)
您可以使用 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()的内存使用量减少了20%到25% 到Python 3.5。 PEP 468(保留一个** kwargs的顺序 function。)由此实现。保持顺序的方面 新实现被认为是一个实现细节,应该 不能依赖(这可能会在将来发生变化,但这是可取的 在一些语言中使用这个新的dict实现 在更改语言规范之前发布以强制命令保留 所有当前和未来Python实现的语义;这也是 有助于保持与旧版本的向后兼容 随机迭代次序仍然有效的语言,例如蟒蛇 3.5)。 (由INADA Naoki在issue 27350中提供。最初由Raymond Hettinger提出的想法。)
顺便说一下,如果您需要订单,并且想要反转key/value
为什么不尝试使用元组列表,这样您就不必担心重复的密钥了问题强>:
[ (k1,v1), (k2,v2) ]
希望这有帮助。