2009-08-17 6 views
1

newbie question again.liste des dictionnaires en double copier une seule entrée à une autre liste

Disons que j'ai une liste de dictionnaires imbriqués.

a = [{"value1": 1234, "value2": 23423423421, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423412221, "value3": england, "value4": alpha}, 
    {"value1": 1234, "value2": 23234231221, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423213121, "value3": england, "value4": alpha}] 

Ce que je veux est de déplacer une entrée singularis de chaque copie où value1, value3 et value4 correspondent. Le résultat devrait ressembler à ceci:

b = [{"value1": 1398, "value2": 23423412221, "value3": england, "value4": alpha}, 
    {"value1": 1234, "value2": 23234231221, "value3": norway, "value4": charlie}] 

La liste originale, a, devrait rester dans son état original.

+0

Comment définissez-vous deux répertoires être des doublons? Toutes leurs valeurs étant égales ou juste la "valeur1" ou ...? –

+0

Peu importe, je l'ai résolu. Comment puis-je le supprimer :) –

+0

Vous ne le faites pas. Vous postez votre réponse pour que d'autres puissent en bénéficier. –

Répondre

2

Il y avait une question similaire à ce sujet récemment. Essayez ceci entry. En fait, vous avez posé cette question: "Disons qu'il existe plusieurs entrées où valeur3 et valeur4 sont identiques à d'autres dictionnaires imbriqués.Comment puis-je rapidement et facilement trouver et supprimer ces dictionnaires en double."

Cela ressemble à la même chose, non?

Edit: voler librement le code d'Alex, il ressemble à ceci:

import itertools 
import pprint 
import operator 

alpha, charlie, norway, england = range(4) 

a = [{"value1": 1234, "value2": 23423423421, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423412221, "value3": england, "value4": alpha}, 
    {"value1": 1234, "value2": 23234231221, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423213121, "value3": england, "value4": alpha}] 


getvals = operator.itemgetter('value1', 'value3', 'value4') 

a.sort(key=getvals) 

b = [g.next() for _, g in itertools.groupby(a, getvals)] 
pprint.pprint(b) 

Et le résultat est:

[{'value1': 1234, 'value2': 23423423421L, 'value3': 2, 'value4': 1}, 
{'value1': 1398, 'value2': 23423412221L, 'value3': 3, 'value4': 0}] 
+0

Oui :) stupide de ma part. –

Questions connexes