2016-07-12 9 views
-4

英語の説明を、辞書からアクセスする必要があるネストされた要素にマップしようとしています。たとえば、私は次のようなものを印刷します:ネストされたキーをPythonディクショナリの値として使用する

for k,v in A_FIELDS.iteritems() 

    print k + "= " resultsDict[v] 

以下のA_FIELDS Dictのすべてのkについて、次のように印刷します。

A_FIELDS = { 
     'Total Requests' : "['requests']['all']", 
     'Cached Requests' : "['requests']['cached']", 
     'Uncached Requests' : "['requests']['uncached']", 
     'Total Bandwidth' : "['bandwidth']['all']", 
     'Cached Bandwidth' : "['bandwidth']['cached']", 
     'Uncached Bandwidth': "['bandwidth']['uncached']", 
     'Total Page View' : "['pageviews']['all']", 
     'Total Uniques'  : "['uniques']['all']" 
    } 

ただし、辞書の書式設定に関係なく、2つのエラーのいずれかが表示されます。私は内側の引用符(keyError)を持たず、内側の引用符(リストインデックスはstrでない整数でなければなりません)を中心に ""試しました。

値を使って辞書にアクセスし、キーを印刷して英語で読むことができますか?ありがとう

+2

あなたは何を達成しようとしているのか分かりません。 「キー」と「値」の用語を繰り返し使用する代わりに、サンプルの入出力を使用して、実際に何をしたいのかを説明することで、完了しようとしているタスクを明確にすることができます。 – TigerhawkT3

+0

十分に公正。私はそれをもっと明確にしようとしました。私は英語の単語を辞書の値にマッピングしています。 – HectorOfTroy407

+1

何を印刷したいですか?あなたは奇妙なstring-inside-list-inside-stringのことが起こっています。同様に、 'A_FIELDS ['Total Uniques']'を試してみたら、何が印刷されるべきですか? – Jeff

答えて

1

listに各キーを格納します。

resultsDict = {'requests':{'all':0, 'cached':1, 'uncached':2}, 
'bandwidth':{'all':0, 'cached':1, 'uncached':2}, 
'pageviews':{'all':0, 'cached':1, 'uncached':2}, 
'uniques':{'all':0, 'cached':1, 'uncached':2}} 

A_FIELDS = { 
     'Total Requests' : ['requests', 'all'], 
     'Cached Requests' : ['requests', 'cached'], 
     'Uncached Requests' : ['requests', 'uncached'], 
     'Total Bandwidth' : ['bandwidth', 'all'], 
     'Cached Bandwidth' : ['bandwidth', 'cached'], 
     'Uncached Bandwidth': ['bandwidth', 'uncached'], 
     'Total Page View' : ['pageviews', 'all'], 
     'Total Uniques'  : ['uniques', 'all'] 
    } 

あなたは常に2つのレベル(その後、例えば'requests''all')にアクセスしている場合は、単にキーを展開します。

>>> for k,(v1,v2) in A_FIELDS.iteritems(): 
...  print '{} = {}'.format(k, resultsDict[v1][v2]) 
... 
Total Page View = 0 
Cached Bandwidth = 1 
Uncached Requests = 2 
Total Uniques = 0 
Total Bandwidth = 0 
Uncached Bandwidth = 2 
Total Requests = 0 
Cached Requests = 1 

あなたは任意の深さにアクセスする場合は、ループを使用します

>>> for k,v in A_FIELDS.iteritems(): 
...  result = resultsDict 
...  for key in v: 
...   result = result[key] 
...  print '{} = {}'.format(k, result) 
... 
Total Page View = 0 
Cached Bandwidth = 1 
Uncached Requests = 2 
Total Uniques = 0 
Total Bandwidth = 0 
Uncached Bandwidth = 2 
Total Requests = 0 
Cached Requests = 1 
関連する問題