2017-07-31 24 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を返すだけで、他の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で、Aは、2に最初に割り当てられbは同じ値、2に割り当てられている7 STORE_NAME続きます。

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

salとそう

は、値を受け取り0。また、json.loadsを呼び出すと一時変数が作成され、その変数が変更され、その後で参照が失われます。

これを機能させるには、すでに行ったように、これを2つに分割する必要があります。

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によって返された辞書に追加することはできませんか?

あなたはそうすることができますが、あなたはそうすることができますが、あなたはそのディクテーションを破棄することができます。 salaries変数には何の影響もなく、dictをsalに割り当てませんでした。 0をsalに割り当てました。

sal = json.loads(salaries)を割り当てると、最初のdictとは関係ない新しいdictが作成され、実際に新しいdictがsalに割り当てられます。 dictをsalまで表示すると、この新しいDICTの修正が表示されます。

関連する問題