Искать ключ в списке словарей - PullRequest
0 голосов
/ 29 мая 2020

«поездка» - это список словарей. В этом случае ключ trip_block появляется только в 6-м словаре. Почему это не работает:

trip[:]['trip_block']
TypeError: list indices must be integers or slices, not str

Но это работает и возвращает значение:

trip[5]['trip_block']

Поскольку этот ключ отображается в разных индексах, я бы очень хотел его найти с помощью trip [:]. Я пытаюсь использовать это в инструкции if:

if trip[:]['trip_block']:

Ответы [ 4 ]

0 голосов
/ 29 мая 2020

trip [:] означает, что вы получаете только копию всего списка

вам нужно перебирать список ...

и поскольку он появляется в разных индексах, вам необходимо сохранить это снова в списке.

Вы можете использовать понимание списка, например

trip_block_items = [item["trip_block"] for item in trip if "trip_block" in item]

или просто a for l oop

trip_block_items = []

for item in trip:
    if "trip_block" in item:
        trip_block_items.append(item["trip_block"])
0 голосов
/ 29 мая 2020

trip[:] - это список. Попытка проиндексировать его, как словарь, не сработает. Если вам нужен список всех значений, которые словари содержат trip_block, попробуйте:

[d['trip_block'] for d in trip if 'trip_block' in d]
0 голосов
/ 29 мая 2020

[:] - это нарезка, и ее действие зависит от типа поездки. Если trip является списком, эта строка создаст мелкую копию списка. Для объекта типа tuple или str он ничего не будет делать (строка будет делать то же самое без [:]), а для (скажем) NumPy массива она создаст новое представление для тех же данных.

Вместо этого вы можете использовать следующее:

trip = [
{"name": "name1", "trip_block__": 10},
{"name": "name2", "trip_block_": 5},
{"name": "name3", "trip_block": 7}
]


res1 = next(item for item in trip if 'trip_block' in item.keys())
print(res1)


res2 = list(filter(lambda trip_block: 'trip_block' in trip_block.keys(), trip))
print(res2)

Первый метод - это поиск dict с желаемым ключом.

Второй - фильтрация dict которые состоят из желаемого ключа

0 голосов
/ 29 мая 2020

Я предлагаю oop через ваш список. Вариант [:] просто захватывает все словари в списке. Взгляните на это и посмотрите, подойдет ли он вам:

for dictionary in trip: #loop through list of dicts
    if 'trip_block' in dictionary.keys(): #check if key is in this dict
        print(dictionary['trip_block'])
        break #end loop, don't use break if there's more than one dict with this key and you need them all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...