Как я могу использовать списки, чтобы получить некоторые данные из другого списка? - PullRequest
0 голосов
/ 29 января 2020

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

a = [{'Hello':5, 'id':[{'cat':'billy', 'dog': 'Paul'}, {'cat':'bill', 'dog': 'Pau'}]},
     {'Hello':1, 'id':[{'cat':'Harry', 'dog': 'Peter'}, {'cat':'Hary', 'dog': 'Pete'}]}]

, и я хотел бы создать следующий список (с использованием списочных представлений):

b = ['billy', 'bill', 'Hary', 'Harry']

Я пробовал это без успеха:

[x for y in a for b in y['id'] for x in b]
[x for y in a for b in y['id'] for x in b['cat']]

Ответы [ 4 ]

1 голос
/ 29 января 2020

Если вы хотите использовать двойное l oop:

[x['cat'] for y in a for x in y['id'] if type(x) is  dict]

, вам необходимо:

  1. Получить значения в списке в виде списка (для y в a)
  2. получить 'id' в y (для x in y ['id'])
  3. Пропустить строку "eat", отфильтровав словарь (если тип (x) является dict )
  4. Доступ к 'cat'

Если вы задаете x, имеет несколько значений, вы можете использовать

[x.values() for y in a for x in y['id'] if type(x) is  dict]]
0 голосов
/ 29 января 2020

вы можете использовать встроенные функции itemgetter и chain (из модуля itertools)

from itertools import chain
from operator import itemgetter

list(map(itemgetter('cat'), chain(*map(itemgetter('id'), a))))

вывод:

['billy', 'bill', 'Harry', 'Hary']

или вы может использовать понимание списка с 2 for циклами внутри, во-первых, чтобы перебрать все элементы dict в списке, а во-вторых, чтобы перебрать самые внутренние списки и извлечь элемент из ключа 'cat':

[i['cat'] for d in a for i in d['id']]
0 голосов
/ 29 января 2020

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

>>> a = [{'Hello':5, 'id':[{'cat':'billy', 'dog': 'Paul'}, {'cat':'bill', 'dog': 'Pau'}]},
     {'Hello':1, 'id':[{'cat':'Harry', 'dog': 'Peter'}, {'cat':'Hary', 'dog': 'Pete'}]}]

>>> [y['cat'] for x in a for y in x['id']]
['billy', 'bill', 'Harry', 'Hary']
0 голосов
/ 29 января 2020

Вы хотите

b = [x['id'][0]['cat'] for x in a]

Каждый элемент a - это диктант, который выглядит как

{
    'Hello': ...,
    'id': [
        {
            'cat': ...
        },
        ...
    ]
}
...