2010-11-23 11 views
3

Beispiel:In Python, was ist die effizienteste Möglichkeit, 3 Dicts zu kombinieren und nach einem der Schlüssel des Diktats zu sortieren?

list1 = {'52': {'timestamp':'1234567890', 'name':'Jason Bourne'}, 
     '42': {'timestamp':'2345678891', 'name':'Sarah Parker'} 
     } 

list2 = {'61': {'timestamp':'3456789012', 'name':'Mike Williams'}, 
     '12': {'timestamp':'4567889123', 'name':'Robert Tissone'} 
     } 

list3 = {'56': {'timestamp':'4567890123', 'name':'Peter Blake'}, 
     '71': {'timestamp':'5678891234', 'name':'Alex Cheng'} 
     } 

//Best way to combine list1, list2, and list3 and sort by timestamp 

result = [ {'timestamp':'1234567890', 'name':'Jason Bourne'}, 
      {'timestamp':'2345678891', 'name':'Sarah Parker'}, 
      {'timestamp':'3456789012', 'name':'Mike Williams'}, 
      {'timestamp':'4567889123', 'name':'Robert Tissone'}, 
      {'timestamp':'4567890123', 'name':'Peter Blake'}, 
      {'timestamp':'5678891234', 'name':'Alex Cheng'} 
     ] 
+0

OP haben - sind Sie sicher, dass Sie verlieren nicht die Tasten etwas dagegen? Wenn ja, Ignacio Antwort ist auf –

+0

Ja, ich kann die Schlüssel verlieren. Vielen Dank! – ensnare

Antwort

8
sorted(itertools.chain(list1.itervalues(), list2.itervalues(), 
    list3.itervalues()), key=operator.itemgetter('timestamp')) 
+2

Denken Sie daran, dass Sie itertools importieren müssen, bevor dies funktioniert. –

+2

Und 'Operator'. –

+2

Denken Sie daran, dass Ihr Zeitstempel eine Zeichenkette ist. –

0
from itertools import chain 
from operator import itemgetter 

def sortedchain(dicos, key): 
    return sorted(chain(v for d in dicos for v in d.values()), key=itemgetter(key)) 

dicos=[list1, list2, list3] 
sortedvalues = sortedchain(dicos, 'timestamp') 

Damit die dicos jede mögliche Länge

Verwandte Themen