2017-07-31 113 views
-4
>>> 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'> 

爲什麼我不能追加到一個由json.loads在線返回dict,因爲我可以用字典薩爾呢? 是不是json.loads只返回dict,這應該是任何其他字典相同?Python的追加到JSON字典在線

回答

3

賦值語句x = y = z意味着xy將取值爲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,被首先分配給2,其次7 STORE_NAME其中b然後分配到相同的值,2。

所以,用

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

sal接收值0。另外,當您調用json.loads時會創建一個臨時變量,並且該變量被修改,之後參考將丟失。

爲了使這個工作,你需要把它分成兩部分,就像你已經完成的那樣。

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

「python中的賦值從右到左發生」不太準確,因爲'sal'實際上是在'json.loads(salaries)[「Hritik」]'之前賦值的。 Python賦值語句中的評估順序比第一次出現時更加混亂。 – user2357112

+0

@ user2357112我在哪裏可以看到這個? –

+1

https://docs.python.org/3/reference/simple_stmts.html#assignment-statements – user2357112

2

爲什麼我不能追加到一個由json.loads返回內聯,因爲我可以用字典SAL做字典?

你可以和你做,但是你只是丟棄該字典。它對salaries變量沒有任何影響,並且您沒有將該詞典分配給sal。您分配0到sal

當您指定sal = json.loads(salaries)時,會創建與第一個字典無關的新字典,然後您實際將新字典賦予sal。當您通過sal查看字典時,對這個新字典的修改仍然可見。