Python: как использовать np.where в списке объектов для возврата условия соответствия внутренних объектов? - PullRequest
0 голосов
/ 13 октября 2019

Пытаясь в дальнейшем освоить Python, я изо всех сил пытаюсь реализовать то, что кажется основной задачей поиска, по списку в векторизованном numpy, и буду признателен за любые советы о том, как это сделать.

У меня есть списоксловари, и я хочу выбрать те словари, которые имеют определенную пару ключ: значение, что будет моим истинным условием. Моя интуиция заключается в использовании np.where в списке, так как эта функция возвращает членов списка, которые соответствуют определенному условию. Но np.where, по-видимому, не позволяет указывать какие-либо внутренние атрибуты / подсписки члена списка.

Например, следующий код дает мне TypeError для индексов списка,

dictionaries = [{'name':'Koko', 'value':1},
                {'name':'Sam', 'value':2},
                {'name':'Mike', 'value':3},
                {'name':'Bob', 'value':4},
                {'name':'Alex', 'value':5}]

names_to_check = ['Koko', 'Bob']

search_results = np.where(dictionaries['name'] in names_to_check)

Я знаю, что всегда мог бы сделать for loop для решения этой проблемы вручную.

Прав ли я здесь, используя np.where, или есть какой-то лучший способ векторизации этой задачи?

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

Вместо numpy Я бы предпочел пойти с filter:

>>> list(filter(lambda x: x["name"] in names_to_check, dictionaries))
[{'name': 'Koko', 'value': 1}, {'name': 'Bob', 'value': 4}]
1 голос
/ 13 октября 2019

Как насчет:

search_results = [x['name'] in names_to_check for x in dictionaries]
print(search_results)

[True, False, False, True, False]
...