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

时间:2017-03-18 06:31:53

标签: python dictionary collections list-comprehension

我有一个原始词典:

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(),但它并没有帮助产生颠倒的字典。

我该怎么做?

1 个答案:

答案 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) ]

希望这有帮助。