Python附加到json dict inlin

2024-04-29 16:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> salaries = '{"Alfred" : 300, "Jane" : 400 }'
>>> sal = json.loads(salaries)["Hritik"]=0
>>> sal
0
>>> sal = json.loads(salaries)
>>> sal["Hritik"]=0
>>> sal
{'Alfred': 300, 'Jane': 400, 'Hritik': 0}
>>> type(json.loads(salaries))
<class 'dict'>
>>> type(sal)
<class 'dict'>

为什么我不能像处理dict sal一样,在json.loads内联返回的dict中追加? json.loads不只是返回一个dict并且应该和其他dict一样吗?在


Tags: jsontypedictclassalfredloadsjanesal
2条回答

Why can't I append to the dict returned by json.loads inline as I can do with the dict sal ?

你可以这样做,但是你只需丢弃这个dict,它对salaries变量没有任何影响,而且你没有将dict赋给sal。您已将0分配给sal。在

当您分配sal = json.loads(salaries)时,这将生成一个与第一个dict无关的新dict,然后您实际上将新dict分配给sal。当您通过sal查看dict时,对这个新dict的修改仍然可见。在

赋值语句x = y = z意味着x和{}都将采用{}的值。在

例如,请看赋值a = b = 2的字节码:

In [45]: import dis; dis.dis(compile('a = b = 2', '', 'exec'))
  1           0 LOAD_CONST               0 (2)
              3 DUP_TOP
              4 STORE_NAME               0 (a)
              7 STORE_NAME               1 (b)
             10 LOAD_CONST               1 (None)
             13 RETURN_VALUE

使用4 STORE_NAME,a首先分配给2,然后是7 STORE_NAME,其中{}被分配给相同的值2。在

所以,和

^{pr2}$

sal接收值0。另外,当您调用json.loads时,会创建一个临时变量,并对其进行修改,随后将丢失引用。在

为了让这个工作,你需要把它分成两部分,就像你已经做的那样。在

sal = json.loads(salaries)
sal['Hritik'] = 0

相关问题 更多 >