私はそれをグーグルで適切に検索することさえできませんが、ここに行きます:
a = {}
b = {}
c = [a, b]
for d in c:
d['ID'] = d
print c
戻り値:
[{'ID': {...}}, {'ID': {...}}]
なぜそうではありませんか:
[{'ID': a}, {'ID': b}]
私はそれをグーグルで適切に検索することさえできませんが、ここに行きます:
a = {}
b = {}
c = [a, b]
for d in c:
d['ID'] = d
print c
戻り値:
[{'ID': {...}}, {'ID': {...}}]
なぜそうではありませんか:
[{'ID': a}, {'ID': b}]
これをステップスルーしましょう:
a = {}
b = {}
c = [a, b]
ここまでは順調ですね。
for d in c:
d['ID'] = d
これを次のように展開できます。
d = c[0]
d['ID'] = d
d = c[1]
d['ID'] = 1
そしてそれを次のように展開します:
d = a
d['ID'] = d
d = b
d['ID'] = d
今代用:
a['ID'] = a
b['ID'] = a
それで、少しの間ループを忘れて、それが何をするかを見てみましょう:
>>> a = {}
>>> a['ID'] = a
>>> a
{'ID': {...}}
つまり、dict
キーの下に、それぞれにそれ自体のコピーが再帰的に含まれるようにしますID
。これがどのように印刷されると思いますか?
したがって、行うべき明らかなことは、辞書全体を印刷しようとすることです。
{'ID': {'ID': {'ID': { …
しかし、これは無限に長い文字列になり、Pythonは無限に達する前にスタックスペースを使い果たします。したがって、何らかの方法で切り捨てる必要があります。
これを印刷することはできません:
{'ID': a}
a
は、たまたまにバインドされている名前であるため、当時dict
と同じd
です。実際、ループはそれがその時点でそれにバインドされていることさえ知りません。a
それはそれを知っていd
ます。しかし、それがわかっていたとしても、結果は間違っているでしょう。これについて考えます:
>>> e = a
>>> a = 0
>>> e
???
したがって、明白な答えは、「など」を表すために省略記号(人間が読める形式で行ったようなもの)を使用することです。
aは辞書です。
bは辞書です。
cは、2つの辞書のリストです(「2つの名前」または「2つの変数」ではありません)。
別のソクラテス式の説明:それが返される場合[{'ID': a}, {'ID': b}]
、値は次のように表示されa
、b
どのタイプになりますか?
ループが何をしているのかを考えてみましょう。a={}b = {} c = [a、b]
for d in c:
d['ID'] = d
dはaまたはbのいずれかになり、次のようになります。
a['ID'] = a
b['ID'] = b
しかし、aとbは{}、dic自体であることを思い出してください。その結果、['ID']をdic自体に割り当てると、ループが作成されます。あなたが
print(c)
キーの値はdic自体であり、その変数表現ではないため、取得 [{'ID': {...}}, {'ID': {...}}]
します。したがって、ループの性質を反映する{...}を取得します。キーの値は、それを指す変数ではなく、dic自体であるため、この後a['ID']['ID']
、またはaでさえあることに ['ID']['ID']['ID']['ID']
注意 し てください。{'ID': {...}}
for d in c:
d['ID'] = d
する必要があります
c = [{'ID': d} for d in c]
あなたのコードは、の各dictにID要素を追加していますc
。つまりa = {'ID': a}
、コードが実行された後です。それ自体への参照が含まれています。
私のスニペットは、からの値を含むプロパティを持つ新しいdictを生成します。'ID'
c