Tu pourrais essayer:
dict((k, bigdict[k]) for k in ('l', 'm', 'n'))
... ou dans Python 3Python versions 2.7 ou ultérieures (merci à Fábio Diniz d' avoir souligné que cela fonctionne aussi en 2.7) :
{k: bigdict[k] for k in ('l', 'm', 'n')}
Mise à jour: Comme le souligne Håvard S , je suppose que vous savez que les clés seront dans le dictionnaire - voir sa réponse si vous n'êtes pas en mesure de faire cette hypothèse. Alternativement, comme le souligne timbo dans les commentaires, si vous voulez une clé manquante bigdict
à mapper None
, vous pouvez faire:
{k: bigdict.get(k, None) for k in ('l', 'm', 'n')}
Si vous utilisez Python 3, et que vous voulez uniquement des clés dans le nouveau dict qui existent réellement dans l'original, vous pouvez utiliser le fait pour afficher les objets implémenter certaines opérations d'ensemble:
{k: bigdict[k] for k in bigdict.keys() & {'l', 'm', 'n'}}
bigdict
ne contient pask
{k: bigdict.get(k,None) for k in ('l', 'm', 'n')}
traitera la situation où une clé spécifiée est manquante dans le dictionnaire source en définissant la clé du nouveau dict sur Nonebigdict.keys() & {'l', 'm', 'n'}
==>bigdict.viewkeys() & {'l', 'm', 'n'}
pour Python2.7Un peu plus court, au moins:
la source
dict((k,bigdict.get(k,defaultVal) for k in wanted_keys)
si vous devez avoir toutes les clés.la source
Un peu de comparaison de vitesse pour toutes les méthodes mentionnées:
Comme prévu, la compréhension des dictionnaires est la meilleure option.
la source
key
n'existent pasbigdict
.Cette réponse utilise une compréhension du dictionnaire similaire à la réponse sélectionnée, mais ne s'applique que sur un élément manquant.
version python 2:
version python 3:
la source
Peut être:
Python 3 prend même en charge les éléments suivants:
Notez que vous pouvez vérifier l'existence dans le dictionnaire comme suit:
resp. pour python 3
la source
a
n'est pas dansbigdict
D'accord, c'est quelque chose qui m'a dérangé plusieurs fois, alors merci Jayesh de me le demander.
Les réponses ci-dessus semblent être une aussi bonne solution que n'importe quelle autre, mais si vous l'utilisez partout dans votre code, il est logique d'envelopper la fonctionnalité à mon humble avis. En outre, il existe deux cas d'utilisation possibles ici: un cas où vous vous souciez de savoir si tous les mots clés se trouvent dans le dictionnaire d'origine. et un où vous ne le faites pas. Ce serait bien de traiter les deux également.
Donc, pour mes deux cents, je suggère d'écrire une sous-classe de dictionnaire, par exemple
Vous pouvez maintenant extraire un sous-dictionnaire avec
Exemples d'utilisation:
Si vous exécutez tout le code ci-dessus, vous devriez voir (quelque chose comme) la sortie suivante (désolé pour la mise en forme):
la source
subdict(orig_dict, keys, …)
?Vous pouvez également utiliser
map
(ce qui est une fonction très utile pour faire connaissance quand même):sd = dict(map(lambda k: (k, l.get(k, None)), l))
Exemple:
PS: je l'ai emprunté
.get(key, None)
à une réponse précédente :)la source
Encore un autre (je préfère la réponse de Mark Longair)
la source
Solution
exemples d'utilisation
la source