252 votes

Dictionnaire : Obtenir une liste de valeurs pour une liste de clés

Existe-t-il un moyen intégré/rapide d'utiliser une liste de clés dans un dictionnaire pour obtenir une liste d'éléments correspondants ?

Par exemple, j'ai :

>>> mydict = {'one': 1, 'two': 2, 'three': 3}
>>> mykeys = ['three', 'one']

Comment puis-je utiliser mykeys pour obtenir les valeurs correspondantes dans le dictionnaire sous forme de liste ?

>>> mydict.WHAT_GOES_HERE(mykeys)
[3, 1]

8voto

Óscar López Points 97105

Essayez ça :

mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one'] # if there are many keys, use a set

[mydict[k] for k in mykeys]
=> [3, 1]

6voto

Pavel Minenkov Points 275
new_dict = {x: v for x, v in mydict.items() if x in mykeys}

0voto

abby sobh Points 1464

Pandas le fait de manière très élégante, même si les compréhensions de listes seront toujours plus techniques pour Python. Je n'ai pas le temps de faire une comparaison de vitesse pour le moment (je reviendrai plus tard pour la faire) :

import pandas as pd
mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one']
temp_df = pd.DataFrame().append(mydict)
# You can export DataFrames to a number of formats, using a list here. 
temp_df[mykeys].values[0]
# Returns: array([ 3.,  1.])

# If you want a dict then use this instead:
# temp_df[mykeys].to_dict(orient='records')[0]
# Returns: {'one': 1.0, 'three': 3.0}

-1voto

mementum Points 1488

Suite à la fermeture de Python : une manière efficace de créer une liste à partir de valeurs dict avec un ordre donné

Récupérer les clés sans construire la liste :

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import collections

class DictListProxy(collections.Sequence):
    def __init__(self, klist, kdict, *args, **kwargs):
        super(DictListProxy, self).__init__(*args, **kwargs)
        self.klist = klist
        self.kdict = kdict

    def __len__(self):
        return len(self.klist)

    def __getitem__(self, key):
        return self.kdict[self.klist[key]]

myDict = {'age': 'value1', 'size': 'value2', 'weigth': 'value3'}
order_list = ['age', 'weigth', 'size']

dlp = DictListProxy(order_list, myDict)

print(','.join(dlp))
print()
print(dlp[1])

Le résultat :

value1,value3,value2

value3

Ce qui correspond à l'ordre donné par la liste

-2voto

yupbank Points 31
reduce(lambda x,y: mydict.get(y) and x.append(mydict[y]) or x, mykeys,[])

au cas où il y aurait des clés qui ne sont pas dans le dict.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X