Existe uma maneira integrada / rápida de usar uma lista de chaves de um dicionário para obter uma lista dos itens correspondentes?
Por exemplo, eu tenho:
>>> mydict = {'one': 1, 'two': 2, 'three': 3}
>>> mykeys = ['three', 'one']
Como posso usar mykeys
para obter os valores correspondentes no dicionário como uma lista?
>>> mydict.WHAT_GOES_HERE(mykeys)
[3, 1]
python
list
dictionary
key
FazJaxton
fonte
fonte
mydict
é uma chamada de função (que retorna um ditado), isso chama a função várias vezes, certo?Algumas outras maneiras além da lista-comp:
map(mydict.__getitem__, mykeys)
None
chave if não encontrada:map(mydict.get, mykeys)
Como alternativa, use
operator.itemgetter
pode retornar uma tupla:Nota : no Python3,
map
retorna um iterador em vez de uma lista. Uselist(map(...))
para uma lista.fonte
Uma pequena comparação de velocidade:
Portanto, a compreensão da lista e o itemgetter são as maneiras mais rápidas de fazer isso.
ATUALIZAÇÃO: Para listas e mapas aleatórios grandes, obtive resultados um pouco diferentes:
Portanto, neste caso o vencedor claro é
f = operator.itemgetter(*l); f(m)
, e fora claro:map(lambda _: m[_], l)
.UPDATE para Python 3.6.4:
Portanto, os resultados para o Python 3.6.4 são quase os mesmos.
fonte
Aqui estão três maneiras.
Aumentando
KeyError
quando a chave não foi encontrada:Valores padrão para chaves ausentes.
Ignorando as chaves ausentes.
fonte
found_keys = mapping.keys() & iterable
dáTypeError: unsupported operand type(s) for &: 'list' and 'list'
no python 2.7; `found_keys = [chave para chave em mapping.keys () se chave em iterável] funciona melhorTente isto:
fonte
Tente o seguinte:
fonte
items()
é preferível, não precisa fazer uma pesquisa adicional, não hálen(mydict)*len(mykeys)
operação aqui! (note que eu estou usando um conjunto)mykeys
a hora constante amortizado, estou usando um conjunto, não uma listafonte
Pandas faz isso de maneira muito elegante, embora a compreensão de muitas listas sempre seja mais tecnicamente pitônica. Não tenho tempo para fazer uma comparação de velocidade agora (voltarei mais tarde e colocarei):
fonte
Ou apenas
mydict.keys()
Isso é uma chamada de método interna para dicionários. Também exploremydict.values()
emydict.items()
.// Ah, OP post me confundiu.
fonte
Após o fechamento do Python: maneira eficiente de criar uma lista de valores dict com uma determinada ordem
Recuperando as chaves sem criar a lista:
A saída:
Que corresponde à ordem dada pela lista
fonte
caso haja chaves que não estão no ditado.
fonte