Проверка Python в списке по отношению к списку словарей - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь получить значения в specs для имен в names.Например, получение значения eye для всех записей в списке name на основе specs.

name=['john', 'tom', 'carry']


specs=[{'name': 'john', 'eye': 'blue' },{'name': 'tom', 'eye': 'green', 'hair': 'long' }, {'name': 'carry', 'eye': 'grey', 'hair': 'short', 'height': 'short'}, {'name': 'peter', 'eye': 'blue' } ]

Это код, который мне удалось написать, и он распечатывает eyeзначения для всех элементов, однако мне нужны только те элементы, которые находятся в списке name.

  for d in specs:
        print (d['eye'])

Ответы [ 5 ]

2 голосов
/ 03 апреля 2019

Вы можете проверить значение в ключе name в словаре, чтобы увидеть, находится ли оно в names следующим образом:

for d in specs:
    if d['name'] in names:
        print(d['eye'])
1 голос
/ 03 апреля 2019
for d in specs:
    if d['name'] in name:
        print (d['eye'])

Нет необходимости выполнять какие-либо дополнительные циклы, все, что вам нужно, - это фильтр, чтобы вы только распечатывали необходимую информацию, а мы фильтровали вывод, используя оператор if.

Оператор if оправдывает проверку, находится ли значение d['name'] в массиве name, проще;если имя, соответствующее спецификации, находится в name = [....]

0 голосов
/ 03 апреля 2019

нет повторения глаз

list({i['eye'] for i in specs if i['name'] in set(name)})
0 голосов
/ 03 апреля 2019

Попробуйте это:

for d in specs:
    if d['name'] in name:
        print(d['eye'])
0 голосов
/ 03 апреля 2019
for d in specs:
    if d['name'] in name:
        print (d['eye'])

Добавить фильтр перед печатью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...