Как отфильтровать словарь внутри списка по его значению, соответствующему условию? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть следующий код

result = [{"origin_location":'original', 'service':'amazon'},
          {'origin_location':'duplicate', 'service':'flipkart'}]

Я хочу получить результат как

[{'origin_location':'duplicate', 'service':'flipkart'}]

т. Е. Получить только те элементы списка, в которых служба является флипкартом.

Я попробовал свой код для этого следующим образом

result = filter(lambda x: (line['service'] for line in result) == 'flipkart', result)
print ("Result= ", result)

Но отображается только []. Как исправить мой код, чтобы получить правильный вывод? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

filter работает на итерации . В Python 2.7 он вернет список, в то время как в Python 3.x у вас есть итерация, которая может быть заключена в list.

Так, например, вам не нужен цикл for в вашем выражении filter:

lst = [{'origin_location':'original', 'service':'amazon'},
       {'origin_location':'duplicate', 'service':'flipkart'}]

result = list(filter(lambda x: x['service'] == 'flipkart', lst))

print("Result= ", result)

# Result=  [{'origin_location': 'duplicate', 'service': 'flipkart'}]

Функция lambda применяется к каждому элементу в lst; если он возвращает False, элемент «отфильтрован».

Обратите внимание, что логика может быть реализована более эффективно через понимание списка:

result = [i for i in lst if i['service'] == 'flipkart']

Если вам нужно повторить лень filter, используйте вместо этого выражение генератора (...).

0 голосов
/ 10 мая 2018

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

>>> result = [i for i in result if i.get('service') == 'flipkart']
>>> result
[{'origin_location': 'duplicate', 'service': 'flipkart'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...