2017-02-15 8 views
0

何らかの条件を満たす辞書に基づいて、辞書のリストで辞書値を取得するにはどうすればよいですか? mが外部に定義されていないためPython - if文の後に辞書のリスト内の辞書要素を取得する

list = [{'name': 'Mike', 'id': 1}, {'name': 'Ellen', 'id': 5}] 
id = 5 
if any(m['id'] == id for m in list): 
    print m['name'] 

これは動作しません:リスト内の辞書の一つは、ID = 5を持っている場合たとえば、私はその辞書のnameキーに対応する値を印刷したいですifステートメント

答えて

3

リストの内包表記を使用できるようにするには、辞書のリストを持っている:

[d for d in lst if d['id'] == 5] 

# [{'id': 5, 'name': 'Ellen'}] 
3
new_list = [m['name'] for m in list if m['id']==5] 
print '\n'.join(new_list) 
1

これは、forループの単一で実現するのは簡単になります。

for d in list: 
    if 'id' in d and d['in'] == 5: 
     print(d['name']) 

ここには2つの重要な概念があります。 1つは、for loopを使用して「リストの各要素を調べる」ことです。 2番目は、inという単語を使用して、辞書に特定のキーがあるかどうかを確認するということです。

+0

を、私は彼の問題を解決するために「Python的」な方法だと思います、など明示的にループを書くのではなく、 – Aaron

+0

@アーロン私はちょうどその名前を印刷することを疑うのは目標です。この時点でさらに複雑なロジックが必要と思われる場合は、リストの理解度が役に立たない場合があります。 (OPは辞書の使い方を理解していないようですので、これはリストの解説を説明するのに悪い時だと思います)。 – theJollySin

0

次はどうですか?

for entry in list: 
    if entry['id']==5: 
     print entry['name'] 
0

それはPython2には存在しませんが、Python3で簡単な解決策ではなくlistChainMapを使用することです。

import collections 

d = collections.ChainMap(*[{'name':'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}]) 
if 'id' in d: 
    print(d['id']) 
0

あなたはフィルタ機能使用してそれを行うことができます。これはかなり基本的なリスト内包で扱うことができるので

lis = [ {'name': 'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}] 
result = filter(lambda dic:dic['id']==5,lis)[0]['name'] 
print(result) 
関連する問題