2015-03-19 3 views

ответ

4

Используйте any() function и generator expression:

if any(d['vin'] == 'A123' for d in mylist): 

Это предполагает, что все d в mylist есть этот ключ; если это не случай использования dict.get():

if any(d.get('vin') == 'A123' for d in mylist): 

В любом случае, будет any() короткого замыкания; он будет проверять только столько d, сколько потребуется, чтобы найти матч. Для вашего образца будет проверен только первый словарь.

+0

Спасибо за ссылку и объяснения. Знаете ли вы что-нибудь о времени вычисления этого? – Freddy

+0

@Freddi: в худшем случае вы пройдете весь список, проверив все 'd' в списке. Если вам нужно делать это часто для большого списка, создайте инверсный индекс. –

-1

Вы можете использовать any с in:

if any('A123' in d.values() for d in mylist): 
+0

Кажется, не работает. –

+0

Это не сработает: 'dict.items()' итерации над '(ключ, значение)' пары. Возможно, вы имели в виду 'd.values ​​()', но даже это не будет проверять, что ** 'd [" vin "]' ** содержит только значение. –

+0

Вы правы, я имел в виду 'values'. – TheBlackCat

0
mylist = [{"vin":"A123"}, {"vin":"B234"}]; 

for lists in mylist: 
    if "vin" in lists: 
     # continue...do something 
Смежные вопросы