insérer ou mettre à jour les clés dans un dictionnaire python
J'ai un python dictionnaire dict1
avec plus de 20 000 clés et je veux update
avec un autre dictionnaire dict2
. Les dictionnaires ressembler à ceci:
dict1
key11=>[value11]
key12=>[value12]
...
...
keyxyz=>[value1x] //common key
...... so on
dict2
key21=>[value21]
key22=>[value22]
...
...
keyxyz=>[value2x] // common key
........ so on
Si j'utilise
dict1.update(dict2)
puis sur les touches de dict1
qui sont semblables à des touches de dict2
les valeurs seront remplacées par les valeurs de dict2
. Ce que je veux, c'est si une clé est déjà présent dans dict1 alors la valeur de cette clé dans dict2 devrait être ajouté à la valeur de dict1. Donc
dict1.conditionalUpdate(dict2)
devrait entraîner
dict1
key11=>[value11]
key12=>[value12]
key21=>[value21]
key22=>[value22]
...
...
keyxyz=>[value1x,value2x]
Une méthode naïve serait une itération sur les touches de dict2
pour chaque touche de dict1
et d'insérer ou de mettre à jour les clés. Est-il une meilleure méthode? Ne le support de python intégré dans la structure de données qui prend en charge ce type de fonctionnalité?
Ce n'est pas la même question.
OriginalL'auteur lovesh | 2012-05-17
Vous devez vous connecter pour publier un commentaire.
Utilisation
defaultdict
à partir des collections du module.OriginalL'auteur Burhan Khalid
C'est en fait assez simple de le faire à l'aide d'un dict compréhension et
itertools.groupby()
:Nous donne:
Naturellement, cela crée un nouveau dict, mais si vous besoin de mettre à jour le premier dict, vous pouvez le faire trivialement par la mise à jour avec le nouveau. Si vos valeurs sont déjà des listes, cela peut nécessiter quelques modifications mineures (mais je présume que vous faisiez que, dans l'intérêt de l'opération, auquel cas, il n'est pas nécessaire).
Naturellement, si vous êtes à l'aide de Python 2.x, alors vous voulez utiliser
dict.viewitems()
oudict.iteritems()
surdict.items()
. Si vous utilisez une version de Python avant dict interprétations, alors vous pouvez utiliserdict((key , value) for ...)
à la place.OriginalL'auteur Gareth Latty
Une autre méthode sans avoir à les importer quoi que ce soit, juste avec le régulier Python dictionnaire:
dict1.get(k,"")
retourne la valeur associée àk
, s'il existe, ou sinon une chaîne vide, puis ajouter le contenu dedict2
.OriginalL'auteur Julien-L