2016-10-19 10 views
2

リスト内の完全な辞書データを取得する方法。キーと値が存在し、ペアになっているかどうかをチェックする必要があります。キーと値が存在する場合、辞書にリストが含まれています。

test = [{'a': 'hello' , 'b': 'world', 'c': 1}, 
     {'a': 'crawler', 'b': 'space', 'c': 5}, 
     {'a': 'jhon' , 'b': 'doe' , 'c': 8}] 

私はこの

if any((d['c'] is 8) for d in test): 

のような、それを条件付きにしようとすると、値がTrueまたはFalseである、しかし、私は結果が

{'a': 'jhon', 'b': 'doe', 'c': 8} 
Iの場合と同じ

のような辞書で欲しいですdo

if any((d['a'] is 'crawler') for d in test): 

resu LTSは、次のとおりです。事前に

{'a': 'crawler', 'b': 'space', 'c': 5} 

おかげ

答えて

2

isのテストではなく、平等のために、それはこれらの変数が保存されていない値のメモリアドレスを比較します。したがって、同じ値に対してFalseを返す可能性が非常に高いです。代わりに==を使用して、同等かどうかを確認する必要があります。

あなたの質問については、あなたはanyfilterやリスト内包表記を使用することができます。

>>> [dct for dct in data if dct["a"] == "crawler"] 
>>> filter(lambda dct: dct["a"] == "crawler", data) 

結果が一致した辞書を含むリストです。アイテムに1つしか含まれていないと思われる場合は、[0]要素を取得できます。

+0

ありがとう、それは働いた:) – KZulfazriawan

1

使用の理解:アイデンティティのための

data = [{'a': 'hello' , 'b': 'world', 'c': 1}, 
     {'a': 'crawler', 'b': 'space', 'c': 5}, 
     {'a': 'jhon' , 'b': 'doe' , 'c': 8}] 

print([d for d in data if d["c"] == 8]) 
# [{'c': 8, 'a': 'jhon', 'b': 'doe'}] 
+0

良い点、それは直接結果を与えました:) Thanks mate – KZulfazriawan

+0

'is =' == 'に変更してください。この答えは完璧です。 'is'は身元確認のために使用されます – jamylak

+0

私はちょうどそのフォームを質問の形でコピーしました。 –

関連する問題