Как извлечь только определенные значения из словаря (Python) - PullRequest
0 голосов
/ 26 октября 2018

Допустим, у меня есть список l = [1, 2, 3, 4] и словарь d = {2: a, 4: b}.Я хотел бы извлечь значения d только в ключе, который также находится в моем списке, и поместить результат в новый список.Вот что я пробовал до сих пор:

new_l=[]
for i in l:
    for key in d.keys():
        if key in l:
            new_l.append(d[key])
print (new_l)

Заранее благодарю за помощь.

Ответы [ 4 ]

0 голосов
/ 26 октября 2018

Перебор словаря с ключом и сопоставление ключа, присутствующего в списке.

L=[1, 2, 3, 4] 
d={2:"a", 4:"b"}

new_l=[]
for k in d.keys():
    if k in L:
        new_l.append(d[k])
print (new_l)
0 голосов
/ 26 октября 2018

Будет сравниваться каждое значение в словаре и совпадение в списке.

Упрощенный ответ ..

>>> l
[1, 2, 3, 4]

>>> d
{2: 'a', 4: 'b'}

>>> [value for (key,value) in d.items() if key in l] 
['a', 'b']
0 голосов
/ 26 октября 2018

Вам не нужно перебирать каждую клавишу во втором цикле for. С Python вы можете просто использовать понимание списка:

L = [1, 2, 3, 4]
d = {2: 'a', 4: 'b'}

res = [d[i] for i in L if i in d]   # ['a', 'b']

Альтернативное функциональное решение возможно, если вы знаете, что значения вашего словаря не являются ложными (например, не 0, None). filter - это ленивый итератор, поэтому вам придется исчерпать через list на следующем шаге:

res = filter(None, map(d.get, L))

print(list(res))  # ['a', 'b']
0 голосов
/ 26 октября 2018

Вы можете пропустить итерацию l

Пример:

l=[1, 2, 3, 4] 
d={2:"a", 4:"b"}


new_l=[]
for key in d.keys():
    if key in l:
        new_l.append(d[key])
print (new_l)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...