gpt4 book ai didi

python - 在 Python 中使用 dict 进行链式方法调用

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:48 27 4
gpt4 key购买 nike

我今天需要弄平一本字典。意思是我想要:

{'_id': 0, 'sub': {'a': 1, 'b':2}}

成为:

{'_id': 0, 'a':1, 'b':2}

所以我想我可以聪明地完成以下一行。

一行:

x = dict(_id=0, sub=dict(a=1, b=2))
y = x.pop('sub').update(x) # incorrect result

这导致 y = None

所以我显然采取了:

多步骤:

x = dict(_id=0, sub=dict(a=1, b=2))
y = x.pop('sub')
y.update(x) # correct result

暂时将“良好的表达编码实践”放在一边,我想了解为什么上面的One-liner 方法会产生None。我原以为 x.pop('sub') 会在某个地方的堆栈上产生一个临时字典,并且原始 x 字典会立即更新。然后堆栈对象将接收链中的下一个方法,即更新。显然,事实并非如此。

为了让社区更好地理解(并且显然是我的)- python 如何解析单行代码并导致

最佳答案

.update() 方法返回None,因为它就地改变了受影响的字典。 .pop() 确实返回弹出的值,即嵌套字典。

您正在更新包含的 dict,为什么不更新 parent dict 呢?

x.update(x.pop('sub'))

结果:

>>> x = dict(_id=0, sub=dict(a=1, b=2))
>>> x.update(x.pop('sub'))
>>> x
{'a': 1, '_id': 0, 'b': 2}

或者您可以递归地执行此操作:

def inplace_flatten(d):
keys = list(d.keys())
for k in keys:
if isinstance(d[k], dict):
inplace_flatten(d[k])
d.update(d.pop(k))

关于python - 在 Python 中使用 dict 进行链式方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570856/

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