Ответ 1
Используйте цикл for
:
keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
myDictionary.get(key)
или понимание списка:
[myDictionary.get(key) for key in keys]
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')
Используйте цикл for
:
keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
myDictionary.get(key)
или понимание списка:
[myDictionary.get(key) for key in keys]
Для этого уже существует функция:
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)
Вы можете использовать At
из pydash:
from pydash import at
dict = {'a': 1, 'b': 2, 'c': 3}
list = at(dict, 'a', 'b')
list == [1, 2]
Никто не упомянул функцию map
, которая позволяет функции работать поэлементно в списке:
mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'}
keys = ['b', 'c']
values = map(mydictionary.get, keys)
# values = ['bear', 'castle']
Если запасных ключей не слишком много, вы можете сделать что-то вроде этого
value = my_dict.get('first_key') or my_dict.get('second_key')
Используйте понимание списка и создайте функцию:
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)
Если у вас установлен pandas
, вы можете превратить его в серию с ключами в качестве индекса. Так что-то вроде
import pandas as pd
s = pd.Series(my_dict)
s[['key1', 'key3', 'key2']]