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

「sensorSerialNumber」によると、「タイムスタンプ」(9.68628281E8)の値内でこの数だけ辞書のこのリストをソートする方法はあり、辞書のリストをキーの値とキーの値で並べ替える方法は?組み込み関数を使用して

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

しかし、私の質問は他の質問からわずかに異なっている

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

をソート。辞書内の辞書がなかった場合、私は同じように、組み込み関数の2番目のキーの文字列を追加する必要があります。任意の呼び出し可能することができ

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

ソート済み(clean_sensors_data ["states"]、key = lambdaユーザ:(user ["sensorSerialNumber"]、ユーザ["timestamp"] ["double"])) –

答えて

2

key、それは各要素内を通過していますlist_to_be_sortedが交互に表示されます。だから、lambdaはここに収まるでしょう:

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

だからラムダはタプルの最初の要素、および'timestamp'キーの辞書値から'double'キーの値として'sensorSerialNumber'キーの値を返します。

デモ:違いを作るためにタイムスタンプ値を含めるための同じシリアル番号が存在しないように

>>> 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}}] 

デモは、その意味がありません。

関連する問題