2012-05-08 13 views
-4

辞書を参照して値を設定するにはどうすればよいですか?Python:キーのポインタで辞書の値を取得または設定する

def set(point): 
    point=0 

dic={'pointer':22} 
set(dic['pointer']) 

print dic # {'pointer': 0} 

1つの引数を送信する必要があります。

+2

なぜこれを行う必要がありますか?それは良い考えではありません。 – jamylak

+2

あなたがしようとしていることを明確にしてください。 –

+0

「なぜこれを行う必要がありますか?それは良い考えではありません」たとえば、JSONのようないくつかの階層構造をパス表記でトラバースしたいとします。そのようなポインティング/参照メカニズムを持つことで、より良い生活が実現します。 – bruziuz

答えて

4

同じ名前の組み込み関数をオーバーライドするので、setという名前の関数を作成しないでください。

あなたがあなたの質問とは全く明らかではないdictに値を設定したいと仮定すると、あなただけの割り当てを使用することができます。

dic={'pointer':22} 
dic['pointer'] = 0 

print dic # {'pointer': 0} 
2

は、これはあなたが何をしたいですか?

>>> dic = {'pointer':22} 
>>> dic['pointer'] = 0 
>>> print dic 
{'pointer':0} 

あなたの質問から不明です。

1

が他よりもあなたの質問とは若干異なる意味を考えると、どのように私は参照によって値を設定します:あなたのバージョンで

def setit(point, adic): 
    adic[point] = 0 

dic={'pointer':22} 
setit('pointer',dic) 

print dic # {'pointer': 0} 

set(dic['pointer'])を渡し集合関数の呼び出しは、単に値を渡します。

Pythonには、たとえばCのようなポインタ型はありません。変数は参照型なので、ポインタは必要ありません。

1

pythonにはあなたが探しているようなポインタオブジェクトは実際にはありませんが、変更可能なオブジェクトは必要に応じて変更することができます(リスト、dict、そういうものですがintやstrではありません)。それが鍵です。それらは変更することができ、そのような関数内で設定することはできません。 =で値を設定しようとすると、setitのローカルスコープ内の変数のみが変更されます。変数にアクセスして変更すると、辞書内の実際のオブジェクトは変更されたままになります。

def setit(val): 
    val.pop() 
    val.append(0) 
dic = {'pointer':['22']} 
setit(dic['pointer']) 
print diC# {'pointer':[0]} 
関連する問題