2016-10-06 3 views
1
{ 
    "states": [ 
     { 
      "timestamp": { 
       "double": 968628281.0 
      }, 
      "sensorSerialNumber": 13020235 
     }, 
     { 
      "timestamp": { 
       "double": 964069109.0 
      }, 
      "sensorSerialNumber": 13020203 
     }, 
     { 
      "timestamp": { 
       "double": 9641066.0 
      }, 
      "sensorSerialNumber": 30785 
     } 
    ] 
} 

Gibt es eine Möglichkeit, diese Liste der Wörterbücher sortieren von „sensor“ und durch diese Zahl innerhalb des Wertes von „Zeitstempel“ (9.68628281E8),Wie sortiere ich eine Liste von Wörterbüchern nach dem Wert eines Schlüssels und nach dem Wert eines Wertes eines Schlüssels?

"timestamp":{"double":9.68628281E8} 

die integrierte Funktion mit (sortiert)

from operator import itemgetter 
newlist = sorted(list_to_be_sorted, key=itemgetter('name')) 

Allerdings ist meine Frage leicht unterscheidet sich von anderen Fragen. Wenn es keinen Wörterbuch innerhalb des Wörterbuch würde ich nur brauchen, um die Zeichenfolge des zweiten Schlüssels für die eingebaute Funktion verwenden, wie:

from operator import itemgetter 
newlist = sorted(list_to_be_sorted, key=itemgetter('name', 'age')) 
+0

sortiert (clean_sensors_data ["states"], key = Lambda-Benutzer: (Benutzer ["sensorSerialNumber"], Benutzer ["Zeitstempel"] ["double"])) Dies ist die Lösung –

Antwort

2

key kann jeden aufrufbar sein, ist es jedes Element übergeben die list_to_be_sorted der Reihe nach. So ein lambda würde hier passen:

newlist = sorted(
    data['states'], 
    key=lambda i: (i['sensorSerialNumber'], i['timestamp']['double'])) 

so das Lambda gibt den Wert für die 'sensorSerialNumber' Schlüssel als erstes Element eines Tupels, und der Wert für die 'double' Schlüssel aus dem Wörterbuch Wert für die 'timestamp' Schlüssel.

Demo:

>>> data = {"states" : 
... [{"timestamp":{"double":9.68628281E8},"sensorSerialNumber":13020235}, 
... {"timestamp":{"double":9.64069109E8},"sensorSerialNumber":13020203}, 
... {"timestamp":{"double":9641066.0},"sensorSerialNumber":30785}] 
... } 
>>> sorted(data['states'], key=lambda i: (i['sensorSerialNumber'], i['timestamp']['double'])) 
[{'timestamp': {'double': 9641066.0}, 'sensorSerialNumber': 30785}, {'timestamp': {'double': 964069109.0}, 'sensorSerialNumber': 13020203}, {'timestamp': {'double': 968628281.0}, 'sensorSerialNumber': 13020235}] 
>>> from pprint import pprint 
>>> pprint(_) 
[{'sensorSerialNumber': 30785, 'timestamp': {'double': 9641066.0}}, 
{'sensorSerialNumber': 13020203, 'timestamp': {'double': 964069109.0}}, 
{'sensorSerialNumber': 13020235, 'timestamp': {'double': 968628281.0}}] 

Die Demo ist nicht sinnvoll, da es keine gleichen Seriennummern für die Aufnahme des Wertes Zeitstempel sind, einen Unterschied zu machen.

Verwandte Themen