2017-05-01 62 views
1

我有一個存儲以下值的複雜的Python字典: MAC地址,RSSI和TIMESTAMP:Python3,訂購一個複雜的字典

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

我想訂購基於時間戳列表..任何想法如何實現?

+0

你期望輸出什麼? –

回答

4

排序的字典,從最小到最大:

>>> 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'])] 

排序字典從最大到最小:

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

理論上我們需要'int(x [1] [1])'儘管這個事情幾乎爲零的機率。 –

+0

@DietrichEpp,你是對的,但在這種情況下,'timestamp'已經是'str',因此字符串比較會更快,而不是將它們轉換爲int並進行比較,因爲轉換是一個代價高昂的問題。 – JkShaw

+0

非常感謝! – Marco

0

如果你想有一個排序的字典,然後使用OrderedDictcollections

>>> 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'])]) 

而訪問是一樣的dict

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

非常感謝! – Marco