2016-05-07 7 views
2

私はストレージにdictsいくつかの形式でデータを使用しています:アクセスネストされた辞書のデータ

users_data['user_1']['Age']  
`users_data`['user_1']['height'] 

170:だから私はこれを行うことができます

users_data = {'user_1':{'Name':'Carlos','Age':25,'address':'adress','height':170}, 
      'user_2':{'Name':'Pedro','Age':22,'address':'adress','height':175}, 
      'user_3':{'Name':'Ana','Age':51,'address':'adress','height':163}} 

しかし、これは迷惑になり始めます。これを行うには短い方法があり

foo(users_data`['user_1']['age'] ,users_data`['user_1']['address'],users_data`['user_1']['height']) 

def foo(age,address,height): 
    do something 

ように私は、関数を呼び出す必要があります:F私は私が持っている場合は、他の機能で常にデータは、たとえばことを使用する必要があります?以下のようなもの:

users_data['user_1'][['age','address','height']] 
+0

foo(u1 ['age']、u1 ['address']、u1 ['height']) 'を呼び出すだけで、 ? –

答えて

3

あなたはこのような何かを行うことができます。詳細については

foo(*(users_data['user_1'][k] for k in ('Age', 'address', 'height'))) 

Unpacking Argument Listsを参照してください。

+1

(+1)のようにOKですが、(foo(* access(users_data ['user_1')の)相対的な意味をより明瞭に伝えるヘルパー関数として、 'age'、 'address'、 'height')) 'もちろん、' access'という名前は最良のものではありませんが、これは単なるコメントです。 – gboffi

+1

もちろん可能です!これは、あなたがこの問題にどのようにアプローチできるかを示すための単なる例でした。これらのプロパティにアクセスする関数を作成したい場合は、makeの呼び出しです:)。 – AKS

1
この

In [28]: def foo((a,b,c)): 
    print a,b,c 

のようなあなたの機能を変更し、あなたのdictで、このようないくつかのことを行う

In [29]: from operator import itemgetter 
In [30]: foo(itemgetter('Age', 'address', 'height')(users_data['user_1'])) 

itemgetterつ以上の引数が渡された場合、タプルを返します。詳細については、itemgetter

+0

@AKSだから私は機能のわずかな変更を提案した。あなたは私の提案を見ることができます;彼のニーズを満たす。 –

+0

そのように関数を定義する方が良いのですか? –

関連する問題