Вывести значение из списка словарей

Есть список со словарями

[{"ID":"100059","STATUS_ID":"F","status":"completed","shop_ID":"1021440"},
{"ID":"100060","STATUS_ID":"F","status":"completed","shop_ID":"1021576"},
{"ID":"100061","STATUS_ID":"F","status":"canceled","shop_ID":"1021841"}]

Как мне вывести значение "status" для shop_ID":"1021841"?


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

Автор решения: arklight

Если нужно быстрое решение (в плане скорости написания), то можно обычным перебором пройтись и проверить значение

data = [{"ID": "100059", "STATUS_ID": "F", "status": "completed", "shop_ID": "1021440"},
        {"ID": "100060", "STATUS_ID": "F", "status": "completed", "shop_ID": "1021576"},
        {"ID": "100061", "STATUS_ID": "F", "status": "canceled", "shop_ID": "1021841"}]

for item in data:
    if item["shop_ID"] == "1021841":
        print(item["status"])

Вывод будет

canceled
→ Ссылка
Автор решения: Namerek

Если спсок не длинный то можно и перебором (или нужно на один раз)
Но если список горазд длинее чем 3 элемента а данных за сессию из него нужно много и разных, то лучше так

a = [{"ID":"100059","STATUS_ID":"F","status":"completed","shop_ID":"1021440"},
{"ID":"100060","STATUS_ID":"F","status":"completed","shop_ID":"1021576"},
{"ID":"100061","STATUS_ID":"F","status":"canceled","shop_ID":"1021841"}]

d = {item.pop('ID'): item for item in a}
print(
    d['100060'].get('status')
)
→ Ссылка
Автор решения: nomnoms12

Можете использовать функцию filter:

li = [{"ID":"100059","STATUS_ID":"F","status":"completed","shop_ID":"1021440"},
{"ID":"100060","STATUS_ID":"F","status":"completed","shop_ID":"1021576"},
{"ID":"100061","STATUS_ID":"F","status":"canceled","shop_ID":"1021841"}]

filtered = filter(lambda x: x['shop_ID'] == '1021841', li)
statuses = [x['status'] for x in filtered]
print(*statuses)
canceled
→ Ссылка