2017-04-05 4 views
0
data = { 
    "items" : [{"potion" : 1}, {"potion2" : 1}] 
} 

print(data["items"][0]["potion"]) 

したがって、ここにジスがあります。私は[0]のような数字を提供せずにpotion2を取得したいが、いくつかの変数には5つの項目があり、3つの項目があるかもしれないので、私はできない。その前にその番号を指定しないでpotion2を取得する方法はありますか?変数内の要素キーを持つリストで名前付き辞書を取得する

+0

本当に単一エントリ辞書のリストが必要ですか?これは物事をより困難にします。なぜ単に「アイテム」を持っていないのですか?(「potion」:1、「potion2」:1} **あなたはそれらを名前で検索できますか? – Prune

答えて

0

ハードコーディングがすべての状況で機能しないため、インデックスを提供したくないと仮定しています。

リスト内でそのキーを持つアイテムを引き出すことができます。

そのキーを持つアイテムのリストを作成します。これは通常1つの場合もありますが、コンテナ自体はそのキーを持つエントリが1つだけであることを強制しません。

その後、リストを反復するか、または返された値が空であるかどうかをチェックして、最初の要素を取ることができます。

>>> data = {'items': [{'potion': 1}, {'potion2': 1}]} 
>>> e = filter(lambda i: 'potion' in i, data['items']) 
>>> for i in e: 
...  print(i['potion']) 
... 
1 

または最初の要素のみを引き出します。私はあなたがインデックスを言わなかったことに気づいていますが、このインデックスはフィルタリングされたリストに適用され、最初に空ではないことを確認します。

>>> if e: 
...  print(e[0]['potion']) 
... 
1 
関連する問題