使用单个查找检索并替换dict中的值

时间:2018-03-08 09:37:25

标签: python python-3.x dictionary lookup

当我希望检索替换dict中的值时,我天真地写道:

old_value = my_dict['key']
my_dict['key'] = new_value

但是..这是'key'哈希表中my_dict的两次查找。而且我确信只有一个是必要的。

如何只使用一次查找才能获得相同的行为? python是否自动将JIT优化掉了?

[编辑]:我知道python dict查找很便宜,并且除非my_dict很大或者操作完成数十亿次毫秒,否则性能提升会非常麻烦。
我很好奇这个显然基本的功能是否在python中实现,如old_value = my_dict.retrieve_and_replace('key', new_value)

1 个答案:

答案 0 :(得分:1)

在dict中存储引用而不是值将执行您想要的操作。这并不是一个优雅的演示,只是一个简单的演示:

>>> class MyMutableObject(object):
        pass
>>> m = MyMutableObject()
>>> m.value = "old_value"
>>> my_dict["k"] = m

现在,当您想要将my_dict["k"]更改为新值时,请记住旧值,并在"k"上进行一次查询:

>>> m2 = my_dict["k"]
>>> m2.value
'old_value'
>>> m2.value = 'new_value'

由您自行决定复杂支付的价格是否值得节省一次字典查询的时间。解除引用m2.value并重新分配它将花费2个以上的字典查找。