2016-10-19 3 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): 

значение является истинным или ложным, но я хочу, чтобы результат словарем как

{'a': 'jhon', 'b': 'doe', 'c': 8} 

же, как если бы я do

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

resu LTS является:

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

Заранее спасибо

ответ

2

is тестов для идентичности, а не равенство, которое означает, что он сравнивает адрес памяти не значение этих переменные, хранящие. Поэтому очень вероятно, что он вернет False для тех же значений. Вместо этого вы должны использовать ==, чтобы проверить равенство.

Что касается вашего вопроса, то вы можете использовать filter или списковых над any:

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

В результате список, содержащий совпавшие словари. Вы можете получить [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

Хорошая точка, это alredy дал прямой результат :) Спасибо mate – KZulfazriawan

+0

Пожалуйста, измените 'is' на' == ', и этот ответ будет идеальным. 'is' используется для проверки личности – jamylak

+0

Я просто скопировал этот вопрос формы, сделал редактирование. –

Смежные вопросы