通过一次查找检索和替换字典中的值
Retrieve and replace value in a dict with a single lookup
当我希望同时检索 和 替换字典中的值时,我天真地写:
old_value = my_dict['key']
my_dict['key'] = new_value
但是..这是 my_dict
哈希表中 'key'
的两次查找。而且我确定只需要一个。
如何仅通过一次查找获得相同的行为?
python 会自动进行 JIT 优化吗?
[编辑]:我知道 python dict 查找很便宜,除非 my_dict
很大或操作在一毫秒内完成数十亿次,否则性能提升将是非常有趣的。
我只是好奇 python 中是否实现了这个看似基本的功能,例如 old_value = my_dict.retrieve_and_replace('key', new_value)
.
在 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 次以上的字典查找。
当我希望同时检索 和 替换字典中的值时,我天真地写:
old_value = my_dict['key']
my_dict['key'] = new_value
但是..这是 my_dict
哈希表中 'key'
的两次查找。而且我确定只需要一个。
如何仅通过一次查找获得相同的行为?
python 会自动进行 JIT 优化吗?
[编辑]:我知道 python dict 查找很便宜,除非 my_dict
很大或操作在一毫秒内完成数十亿次,否则性能提升将是非常有趣的。
我只是好奇 python 中是否实现了这个看似基本的功能,例如 old_value = my_dict.retrieve_and_replace('key', new_value)
.
在 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 次以上的字典查找。