gpt4 book ai didi

用于临时动态修改 dict 的 python 配方

转载 作者:行者123 更新时间:2023-11-30 21:50:06 27 4
gpt4 key购买 nike

我在我正在编写的一些代码中看到了这种模式

e = {...} # a dictionary
e["table"] = "users"
e["timestamp"] = time.time()
queue.push(e)
del e["table"]
del e["timestamp"]
[...]
e["table"] = "events"
queue2.push(e)
del e["table"]
# etc..

我正在通过一些队列对事件进行多路分解,但每个队列的格式略有不同。我已经开始这样做了:

queue.push( dict(e.items() + [("table":"users"), ("timestamp", time.time())]) )

但它看起来很丑而且会减慢代码速度。我还能做什么?

最佳答案

假设 queue.push 仅需要读取权限,您可以尝试如下操作:

class MergedDicts(dict):
def __init__(self, *dicts, **kw):
self.dicts = dicts + (kw,)

def __getitem__(self, key):
for d in self.dicts:
if key in d: return d[key]
raise KeyError(key)

这将为您提供一个从两个源返回项目的字典,但避免了从原始版本构建另一个实际副本的开销(尽管您可能需要实现的不仅仅是__getitem__,具体取决于推送需要)。

用法:

other = {"table": "users", "timestamp": time.time()}
queue.push(MergedDicts(e, other))

或者:

queue.push(MergedDicts(e, table="users", timestamp=time.time()))

关于用于临时动态修改 dict 的 python 配方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com