2017-04-12 20 views
-1

が、私はそれが与える辞書を印刷するときにpythonで特定の値を取得します。ネストされた辞書

u'Tags': [{u'Value': 'stone', u'Key': 'primary-key'}, {u'Value': 'hello world', u'Key': 'Name'}, {u'Value': '123 Street', u'Key': 'Address'}] 

私はキー「名前」すなわちの値を必要とする「Hello World」の

を私はこれを試してみました:

for t in Tags: 
    print(t["Name"]) 

が、エラーが出ます:

KeyError: 'Name' 
+1

'NAME'が値です!キー – RaminNietzsche

+0

u'Value 'を使用する必要があります:' hello world ' - > t [' Value ']はあなたに与えます。名前を使用するのはwronfです –

答えて

1

'Name'ここではキーではなく、値です。あなたの辞書はすべてu'Key'u'Value'のキーを持っていますが、少し混乱するかもしれません。これはしかしあなたの例のために働く必要があります

:あなたの内部の辞書で

for t in Tags: 
    if t['Key'] == 'Name': 
     print t['Value'] 
2

辞書では、エントリTagsは、キーと値をネストされたエントリとして持つオブジェクトのリストを指します。したがって、アクセスは直接ではなく、キーの検索が必要です。これは、単純なリストの内包表記を使用して行うことができます。

d = {u'Tags': [{u'Value': 'stone', u'Key': 'primary-key'}, 
       {u'Value': 'hello world', u'Key': 'Name'}, 
       {u'Value': '123 Street', u'Key': 'Address'}]} 

name = next((v for v in d['Tags'] if v['Key'] == 'Name'), {}).get('Value') 
0

あなたは「キー名」を検索する場合:

findYourWord ='hello world' 

for dictB in dictA[u'Tags']: 
    for key in dictB: 
     if dictB[key]== findYourWord: 
      print(key) 

はあなたのこのヘルプを願っています。良い一日を。

0

を、唯一のキーは、「キー」と「値」です。してみてください、あなたがしたいキーの値を見つけるために関数を作ってみる:

def find_value(list_to_search, tag_to_find): 
    for inner_dict in list_to_search: 
     if inner_dict['Key'] == tag_to_find: 
      return inner_dict['Value'] 

In [1]: my_dict = {u'Tags': [{u'Value': 'stone', u'Key': 'primary-key'}, {u'Value': 'hello world', u'Key': 'Name'}, {u'Value': '123 Street', u'Key': 'Address'}]} 


In [2]: find_value(my_dict['Tags'], 'Name') 
Out[2]: 'hello world' 
関連する問題