Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过单个查找检索并替换dict中的值_Python_Python 3.x_Dictionary_Lookup - Fatal编程技术网

Python 通过单个查找检索并替换dict中的值

Python 通过单个查找检索并替换dict中的值,python,python-3.x,dictionary,lookup,Python,Python 3.x,Dictionary,Lookup,当我希望检索和替换dict中的值时,我天真地写道: old_value = my_dict['key'] my_dict['key'] = new_value 但是。。这是在my_dict哈希表中对'key'的两个查找。我相信只有一个是必要的 如何仅通过一次查找获得相同的行为? python是否自动实现了JIT优化 [编辑]:我知道python dict查找很便宜,而且除非my_dict很大,或者操作每秒进行数十亿次,否则性能的提高将非常有趣。 我只是好奇这个显然是基本的功能是否在pytho

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

old_value = my_dict['key']
my_dict['key'] = new_value
但是。。这是在
my_dict
哈希表中对
'key'
的两个查找。我相信只有一个是必要的

如何仅通过一次查找获得相同的行为?
python是否自动实现了JIT优化


[编辑]:我知道python dict查找很便宜,而且除非
my_dict
很大,或者操作每秒进行数十亿次,否则性能的提高将非常有趣。

我只是好奇这个显然是基本的功能是否在python中实现,比如
old\u value=my\u dict.retrieve\u and\u replace('key',new\u value)
在dict中存储一个引用而不是一个值可以满足您的需要。这不是一个优雅的演示,只是一个简单的演示:

>>> class MyMutableObject(object):
        pass
>>> m = MyMutableObject()
>>> m.value = "old_value"
>>> my_dict["k"] = m
现在,如果要将my_dict[“k”]更改为新值,但要记住旧值,只需在
“k”
上进行一次查找:


这取决于你决定,这在复杂性方面付出的代价是否值得一次字典查找所节省的时间。取消对m2.value的引用并重新分配它将需要在引擎盖下再查找两次字典

你从来没有使用过旧的价值观吗?@Chris\u Rands我用过。我需要告诉它
旧值。忘记()
旧值。你被移动了()
旧值。死亡()
旧值。拿一个新的开始()
或诸如此类的事情来说:)你能在问题中创建一个简单的例子来说明你的实际问题吗?此外,dict查找非常便宜,这真的是代码的瓶颈吗?@Chris_Rands,不是。我承认这纯粹是吹毛求疵(0:)我只是好奇。@Chris_Rands作为一个最小的例子。我现在还没想过要把我的剧本写得精雕细琢。但是我认为像
old_value
这样的对象在准备进行gc之前必须记录它们的删除或强制执行最后一个事件是很常见的,不是吗?我很惊讶,因为我希望看到一些更像python原语的东西,但我必须说它做到了:)
>>> m2 = my_dict["k"]
>>> m2.value
'old_value'
>>> m2.value = 'new_value'