Duplizierte Datenverkettung in Python auflisten

Ich bin ein Neuling in Python und vor Problem in immer diese Ausgabe

a = [('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'),('audioVerify', '091;0'), ('imageVerify', 'duck.gif'),('imageVerify', 'egg.gif')] 

Ich möchte eine neue Liste erstellen, die alle 0. eindeutigen Elemente wie halten sollte

  • Kann ich STATICFILES_DIR selber wie STATIC_ROOT in Django 1.3 machen?
  • Ausgabe mit virtualenv - kann nicht aktiviert werden
  • Was ist der richtige Ansatz für das Aufrufen von Funktionen nach einer Flasche App läuft?
  • Verwirrung zum Lesen von HTML-Tabelleninhalten mit BeautifulSoup?
  • Konvertieren Sie Python-Liste mit Nicht-Werte zu numpy Array mit Nan-Werte
  • Wie ist die Reihenfolge der Artikel in der Matplotlib-Legende bestimmt?
  •   audioVerify,imageVerify,textVerify 

    So dass das erwartete Ergebnis ist

      ['textVerify',(('AH', 'SELECT SERVICES'), ('F7', 'test1>')) 'audioVerify', ('091;0'), ('imageVerify', ('duck.gif','egg.gif')] 

    4 Solutions collect form web for “Duplizierte Datenverkettung in Python auflisten”

    Du defaultdict lieber ein defaultdict :

     >>> from collections import defaultdict >>> d = defaultdict(list) >>> for item in a: ... d[item[0]].append(item[1:]) ... >>> d defaultdict(<class 'list'>, {'textVerify': [('AH', 'SELECT SERVICES'), ('F7', 'est1>')], 'imageVerify': [('duck.gif',), ('egg.gif',)], 'audioVerify': [('091;0',)]}) 

    Jetzt können Sie auf seine Elemente nach Name / Index zugreifen:

     >>> d['textVerify'] [('AH', 'SELECT SERVICES'), ('F7', 'test1>')] >>> d['textVerify'][0][0] 'AH' 

    Wenn Sie die Reihenfolge der Wörterbuchschlüssel OrderedDict , können Sie ein OrderedDict zusammen mit der .setdefault() Methode verwenden, wie von Ashwini Chaudhary beschrieben:

     >>> d = OrderedDict() >>> for x in a: ... d.setdefault(x[0],[]).append(x[1:]) ... >>> d OrderedDict([('textVerify', [('AH', 'SELECT SERVICES'), ('F7', 'test1>')]), ('audioVerify', [('091;0',)]), ('imageVerify', [('duck.gif',), ('egg.gif',)])]) 

    Mit dict.setdefault() ist das etwas schneller als defaultdict() zumindest für kleine Listen:

     >>> a [('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'), ('audioVerify', '091;0'), ('imageVerify', 'duck.gif'), ('imageVerify', 'egg.gif')] >>> d={} >>> for x in a: ... d.setdefault(x[0],[]).append(x[1:]) ... >>> d {'audioVerify': [('091;0',)], 'textVerify': [('AH', 'SELECT SERVICES'), ('F7', 'test1>')], 'imageVerify': [('duck.gif',), ('egg.gif',)]} >>> d["audioVerify"] [('091;0',)] 
     >>> from collections import defaultdict >>> d = defaultdict(list) >>> _ = [d[i[0]].append(i[1:]) for i in a] >>> d['textVerify'] [('AH', 'SELECT SERVICES'), ('F7', 'test1>')] 
     a = [('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'),('audioVerify', '091;0'), ('imageVerify', 'duck.gif'),('imageVerify', 'egg.gif')] c=set(i[0] for i in a) d=dict() for i in c: m=[] for v in a: if v[0]==i: m.extend(list(v[1:])) if len(m) !=0: d[i]=m print(d) 
    Python ist die beste Programmiersprache der Welt.