2016-10-15 4 views
0
#!/usr/bin/python 
import numpy as np 

td={} 
d = {} 
for col in ['foo','bar','baz']: 
    for row in ['a','b','c','d']: 
     td.setdefault(row, np.random.randn()) 
     d.setdefault(col, td) 

print d 
del d['foo']['c'] 
print d 

出力:ここ奇妙な挙動は

{'baz': {'a': -1.6340274257732716, 'c': 0.6674016962534858, 'b': 2.0410088421902652, 'd': -1.2602923734811284}, 'foo': {'a': -1.6340274257732716, 'c': 0.6674016962534858, 'b': 2.0410088421902652, 'd': -1.2602923734811284}, 'bar': {'a': -1.6340274257732716, 'c': 0.6674016962534858, 'b': 2.0410088421902652, 'd': -1.2602923734811284}} 
{'baz': {'a': -1.6340274257732716, 'b': 2.0410088421902652, 'd': -1.2602923734811284}, 'foo': {'a': -1.6340274257732716, 'b': 2.0410088421902652, 'd': -1.2602923734811284}, 'bar': {'a': -1.6340274257732716, 'b': 2.0410088421902652, 'd': -1.2602923734811284}} 

意図はd['foo']['c]を削除することですが、これは持っている場合、すべての'c'年代はわからない。.. 'foo', 'bar', 'baz'渡っ削除得ていますすでにこのフォーラムで回答されている場合は、その答えに私を指摘してください。

答えて

0

dの各値をtdの同じコピーを参照するように設定しています。コピーを区別したい場合は、td辞書を複数作成する必要があります。

これを試してください:

#!/usr/bin/python 
import numpy as np 

d = {} 
for col in ['foo','bar','baz']: 
    td = {} 
    for row in ['a','b','c','d']: 
     td.setdefault(row, np.random.randn()) 
    d.setdefault(col, td) 

print d 
del d['foo']['c'] 
print d 
+0

'[ 'foo' で、 'バー'、 'バズ']におけるCOL用: TD = {} [ 'A'、 'B' の行のための 」 c '、' d ']: td.setdefault(row、np.random.randn()) d.setdefault(col、td) ' –

+0

が機能しました。ありがとう!! –