2017-05-01 3 views
1

Ich habe einen komplexen Python-Wörterbuch bekommt, den folgenden Wert speichert: MAC-ADRESSE, RSSI und Datenstand:Python3, einen komplexe dict Bestellung

beacons_detected = { 
    '55:c1:9a:41:4c:b9': ['-78', '1493580469'], 
    '9c:20:7b:e0:6c:41': ['-74', '1493622425'], 
    '5e:30:e7:12:97:64': ['-79', '1493587968'] 
} 

Ich mag diese Liste, um auf dem Zeitstempel basiert .. Irgendeine Idee, wie man das erreicht?

+0

Welche Ausgabe erwarten Sie? –

Antwort

4

sortiert das Wörterbuch vom kleinsten zum größten:

>>> sorted(beacons_detected.items(), key=lambda x: x[1][1]) 
[('55:c1:9a:41:4c:b9', ['-78', '1493580469']), ('5e:30:e7:12:97:64', ['-79', '1493587968']), ('9c:20:7b:e0:6c:41', ['-74', '1493622425'])] 

sortiert das Wörterbuch vom größten zum kleinsten:

>>> sorted(beacons_detected.items(), key=lambda x: x[1][1], reverse=True) 
[('9c:20:7b:e0:6c:41', ['-74', '1493622425']), ('5e:30:e7:12:97:64', ['-79', '1493587968']), ('55:c1:9a:41:4c:b9', ['-78', '1493580469'])] 
+0

Theoretisch wollen wir 'int (x [1] [1])' obwohl die Wahrscheinlichkeit, dass diese Angelegenheit praktisch Null ist. –

+0

@DietrichEpp, Sie haben recht, aber in diesem Fall ist der 'timestamp' bereits ein' str', daher wäre der String-Vergleich viel schneller, anstatt sie in einen int umzuwandeln und einen Vergleich zu machen, da die Konvertierung eine kostspielige Angelegenheit ist. – JkShaw

+0

Vielen Dank! – Marco

0

Wenn Sie ein sortiertes Wörterbuch wollen, dann verwenden Sie die OrderedDict von collections:

>>> ordered = OrderedDict(sorted(beacons_detected.items(), key=lambda x: x[1][1])) 
OrderedDict([('55:c1:9a:41:4c:b9', ['-78', '1493580469']), 
      ('5e:30:e7:12:97:64', ['-79', '1493587968']), 
      ('9c:20:7b:e0:6c:41', ['-74', '1493622425'])]) 

Und der Zugriff ist der gleiche wie dict:

>>> ordered['55:c1:9a:41:4c:b9'] 
['-78', '1493580469'] 
+0

Vielen Dank! – Marco

Verwandte Themen