Python字典按值与时间戳排序键

时间:2017-08-23 12:50:17

标签: python sorting dictionary

我有一个字典,其中填充了由天线收集的wifi探测请求。字典中的键是探测请求中的唯一MAC地址。结构如下:

dictionary = {KEY=[MACADDRESS] : FIELDS=0:[FIRSTSEEN] 1:[LASTSEEN] 2:[DECIBEL] 3:[COUNTER] 4:[SSID]}

字典可能如下所示:

dictionary = {'00:00:00:00:00:01': ['Aug 18, 2017 18:15:56.081727942 CEST', 'Aug 18, 2017 18:25:37.669160369 CEST', '-60', 18, 'SSID1'], 
'00:00:00:00:00:02': ['Aug 18, 2017 18:19:22.764895209 CEST', 'Aug 18, 2017 18:33:50.052906956 CEST', '-46', 5, 'SSID2'], 
'00:00:00:00:00:03': ['Aug 18, 2017 18:18:53.489779683 CEST', 'Aug 18, 2017 18:45:53.489779683 CEST', '-62', 1, 'SSID3']}

现在假设有100个条目和我想生成一个按[LASTSEEN]时间戳值(键的值1)排序的列表。我该怎么做呢?

我在answer找到了一个“类似”的问题,其中使用了带有lambda函数的sorted(字典),但是我无法理解如何在这里应用它,也是没有考虑时间戳。我想也许某种程度上可以将时间戳转换为UNIX时间,这可以使排序过程更容易。

更新(为了进一步澄清):

我想重新排列字典的键(如果可能的话)并保留所有值。我希望能够在字典中运行排序功能,然后选择最新的3个:

#Here I would sort the dictionary
sort_function()

#then I would print eg. 3 entries
count_to_3 = 0
for keys, values in dictionary.items():
    count_to_3 += 1
    print keys,values
    if count_to_3 == 3:
        break

然后输出(按第二个时间戳排序)。很抱歉,如果它似乎与双时间戳混淆:

00:00:00:00:00:03 ['Aug 18, 2017 18:18:53.489779683 CEST','Aug 18, 2017 18:45:53.489779683 CEST', '-62', 1, 'SSID3']
00:00:00:00:00:02 ['Aug 18, 2017 18:19:22.764895209 CEST','Aug 18, 2017 18:33:50.052906956 CEST', '-46', 5, 'SSID2']
00:00:00:00:00:01 ['Aug 18, 2017 18:15:56.081727942 CEST','Aug 18, 2017 18:25:37.669160369 CEST', '-60', 18, 'SSID1']

1 个答案:

答案 0 :(得分:2)

本质上,字典没有排序,因此您可以使用键和值创建元组列表。

lst = sorted(d.items(), key = lambda kvp: kvp[1][1])

[('00:00:00:00:00:01', ['Aug 18, 2017 18:15:56.081727942 CEST', 'Aug 18, 2017 18:25:37.669160369 CEST', '-60', 18, 'SSID1']), ...]

现在您需要注意的是,因为您的时间戳是一个字符串,它可能无法完全按照您的意愿排序。在这种情况下,你将不得不转换它。例如,某些函数to_datetime

lst = sorted(d.items(), key = lambda kvp: to_datetime(kvp[1][1]))