Словарь Python получает несколько значений

Sry, если этот вопрос уже существует, но я искал довольно долгое время.

У меня есть словарь на python, и я хочу получить некоторые значения из него в виде списка, но я не знаю, поддерживается ли это реализацией.

myDictionary.get('firstKey')   # works fine

myDictionary.get('firstKey','secondKey')
# gives me a KeyError -> OK, get is not defined for multiple keys
myDictionary['firstKey','secondKey']   # doesn't work either

Но могу ли я достичь этого? В моем примере это выглядит просто, но, допустим, у меня есть словарь из 20 записей, и я хочу получить 5 ключей. Есть ли другой способ, чем делать

myDictionary.get('firstKey')
myDictionary.get('secondKey')
myDictionary.get('thirdKey')
myDictionary.get('fourthKey')
myDictionary.get('fifthKey')

Ответ 1

Используйте цикл for:

keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
    myDictionary.get(key)

или понимание списка:

[myDictionary.get(key) for key in keys]

Ответ 2

Для этого уже существует функция:

from operator import itemgetter

my_dict = {x: x**2 for x in range(10)}

itemgetter(1, 3, 2, 5)(my_dict)
#>>> (1, 9, 4, 25)

itemgetter вернет кортеж, если передано более одного аргумента. Чтобы передать список itemgetter, используйте

itemgetter(*wanted_keys)(my_dict)

Ответ 3

Вы можете использовать At из pydash:

from pydash import at
dict = {'a': 1, 'b': 2, 'c': 3}
list = at(dict, 'a', 'b')
list == [1, 2]

Ответ 4

Никто не упомянул функцию map, которая позволяет функции работать поэлементно в списке:

mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'}
keys = ['b', 'c']

values = map(mydictionary.get, keys)

# values = ['bear', 'castle']

Ответ 5

Если запасных ключей не слишком много, вы можете сделать что-то вроде этого

value = my_dict.get('first_key') or my_dict.get('second_key')

Ответ 6

Используйте понимание списка и создайте функцию:

def myDict(**kwargs):
  # add all of your keys here
  keys = ['firstKey','secondKey','thirdKey','fourthKey']

  # iterate through keys 
  # return the key element if it in kwargs 
  list_comp = ''.join([val for val in keys if val in kwargs ])
  results = kwargs.get(list_comp,None)

  print(results)      

Ответ 7

Если у вас установлен pandas, вы можете превратить его в серию с ключами в качестве индекса. Так что-то вроде

import pandas as pd

s = pd.Series(my_dict)

s[['key1', 'key3', 'key2']]