Как отфильтровать список словарей по значению определенного ключа?

Дано:

data_list = [
    {'data': 0, port: '/dev/ttyS4'},
    {'data': 1, port: '/dev/ttyS3'},
    {'data': 0, port: '/dev/ttyS3'},
    {'data': 1, port: '/dev/ttyS5'},
    {'data': 1, port: '/dev/ttyS4'}
]

Мне нужно без перебора в цикле вернуть список, содержащий только те элементы (в данном случае словари), у которых port='/dev/ttyS5'.

Как это можно сделать?


Ответы (2 шт):

Автор решения: Voko
new_list = [x for x in data_list if x[port] == '/dev/ttyS5']
→ Ссылка
Автор решения: gil9red

Это можно сделать через функцию filter:

data_list = [
    {'data':0, 'port': '/dev/ttyS4'},
    {'data':1, 'port': '/dev/ttyS3'},
    {'data':0, 'port': '/dev/ttyS3'},
    {'data':1, 'port': '/dev/ttyS5'},
    {'data':1, 'port': '/dev/ttyS4'}
]
print(list(filter(lambda x: x['port'] == '/dev/ttyS5', data_list)))
# [{'data': 1, 'port': '/dev/ttyS5'}]

Тоже самое через генератор списка:

print([x for x in data_list if x['port'] == '/dev/ttyS5'])
# [{'data': 1, 'port': '/dev/ttyS5'}]
→ Ссылка