Python ont dictionnaire avec le même nom de clés?
J'ai besoin d'avoir un dictionnaire qui pourrait avoir les mêmes que les noms de certains de clés et de renvoyer une liste de valeurs lors de la référence à la clé, dans ce cas.
Par exemple
print mydict['key']
[1,2,3,4,5,6]
Non, mais vous pouvez utiliser mydict = {"key": [1,2,3,4]}
les clés sont ajoutées lors de l'exécution
les clés sont ajoutées lors de l'exécution
OriginalL'auteur b9107007 | 2011-07-25
Vous devez vous connecter pour publier un commentaire.
Pour des raisons de cohérence, vous devriez avoir le dictionnaire de la carte touches de listes (ou ensembles) de valeurs, dont certaines peuvent être vides. Il y a une belle idiome pour cela:
(Un
defaultdict
est comme un simple dictionnaire, mais si une clé est manquante, il fera appel à l'argument que vous avez passé en quand vous instancié et utiliser le résultat comme valeur par défaut. Ce qui permettra de créer automatiquement un ensemble vide de valeurs si vous demandez une clé qui n'est pas déjà présent.)Si vous avez besoin de l'objet ressemble plus à un dictionnaire (c'est à dire de définir une valeur par
d["key"] = ...
) vous pouvez effectuer les opérations suivantes. Mais c'est probablement une mauvaise idée, car cela va à l'encontre de la normale de la syntaxe de Python, et est susceptible de revenir et vous mordre plus tard. Surtout si quelqu'un d'autre a à maintenir votre code.je n'ai pas testé.
self[key]
appelssetitem
si il n'y a aucune de ces questions (qu'est ce que defaultdict ajoute sur le dessus de la plaine dict). Et il est impossible de distinguer qui est l'appel de setitem: l'utilisateur ou defaultdict internes.OriginalL'auteur Katriel
Vous pouvez également essayer
paste.util.multidict.MultiDict
Alors:
Frameworks Web comme les Pylônes sont l'utilisation de cette bibliothèque pour gérer chaîne de requête HTTP/post données, qui peuvent avoir le même nom-clés.
OriginalL'auteur sayap
Vous pouvez utiliser:
Puis au cours de l'exécution:
Édité par @Ben commentaire:
Bien sûr, je vous remercie @Ben
OriginalL'auteur Artsiom Rudzenka
Je suis pas satisfait avec toutes les solutions proposées, c'est ma solution. C'est pour Python 3. Le Code est ci-dessous.
EXEMPLES
(le code est ci-dessous)
CODE
CERTAINS DÉTAILLÉ EXPLICATION
Pour des raisons de simplicité, le constructeur est la même que
dict
. Toutes les valeurs passées au constructeur, ou directement affecté à une touche, doit être iterables.Toutes les valeurs de ma
MultiDict
sont des listes, même si la valeur n'est qu'une. C'est pour éviter la confusion.J'ai aussi ajouté un
remove
méthode pour supprimer une seule entrée de laMultiDict
. En outre, j'ai ajouté unmultiitems
, que ces dossiers sur le couple (clé, valeur) sur toutes les valeurs du dictionnaire.multikeys
etmultivalues
sont similaires.ALTERNATIVES
Vous pouvez également utiliser aiohttp, WebOp ou Werkzeug implémentations de MultiDict.
OriginalL'auteur Marco Sulla
devrait créer une dict à partir de la clé à une liste de valeurs:
Je ne pouvais pas mettre insertMulti dans une lambda, parce que le lambda a besoin de retourner le dict de nouveau.
OriginalL'auteur Sebastian Wagner
C'est un endroit idéal pour utiliser un defaultdict objet à partir des collections de la bibliothèque
renvoie [1,2,3,4,5,6]
Dans le cas où une clé est référencé qui n'a pas été implicitement attribué, un ensemble vide est retournée.
renvoie []
À l'aide de setdefault sur une dict à partir de la bibliothèque standard aurait besoin d'un changement important dans votre syntaxe lors de l'affectation de valeurs et peut obtenir assez salissant. Je n'ai jamais utilisé Multidict, mais il ressemble également à un changement important dans la façon dont les affectations sont faites. En utilisant cette méthode, il vous suffit de supposer qu'il y a peut-être déjà une valeur associée à cette clé dans le dictionnaire et de modifier légèrement votre opérateur d'affectation en utilisant le '+=' opérateur lors de l'attribution de valeurs de clé.
FYI - je suis un grand fan de l'utilisation de la NoneType que la valeur par défaut qui entraîne tout accès à une clé non valide retour Aucun. Il se comporte correctement dans la plupart des cas, y compris l'itération et json décharges, mais pour votre besoin spécifique de la valeur par défaut doit être de type ensemble, sauf si vous souhaitez activer les doublons de valeurs stockées dans la clé. Ensuite, utilisez un liste. En fait, quand vous avez un ensemble homogène dictionnaire de la valeur par défaut doit être de ce type.
OriginalL'auteur Zane Westover