>>> 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
内联json.loads
内联,因为我可以使用dict sal?
没有json.loads
只返回dict
并且应该与其他任何字典相同吗?
答案 0 :(得分:3)
分配声明x = y = z
表示x
和y
都将采用z
的值。
例如,查看赋值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
,然后将b
指定为相同的值,即为2。
所以,用
sal = json.loads(salaries)["Hritik"] = 0
sal
收到值0
。此外,当您调用json.loads
并且已修改时会创建一个临时变量,之后会丢失该引用。
为了实现这一点,您需要将其分解为两部分,就像您已经完成的那样。
sal = json.loads(salaries)
sal['Hritik'] = 0
答案 1 :(得分:2)
为什么我无法附加json.loads内联返回的字典,因为我可以使用dict sal?
你可以,而且你这样做,但那时你就丢弃那个字典。它对salaries
变量没有任何影响,并且您没有将字典分配给sal
。您将0分配给sal
。
当您指定sal = json.loads(salaries)
时,它会生成与第一个字典无关的新字典,然后您实际将新字典分配给sal
。当您通过sal
查看字典时,仍然可以看到对此新字典的修改。