Python字典按带有时间戳的值对键进行排序
我有一本字典,里面有天线收集的wifi探测请求。字典中的键表示探测请求中的唯一MAC地址。结构如下:Python字典按带有时间戳的值对键进行排序,python,sorting,dictionary,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,
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)排序的列表。。我该怎么做呢
我发现了一个与的“类似”问题,其中使用了带有lambda函数的sorted(dictionary)的用法,但我无法在这里思考如何应用它,也没有考虑时间戳。我想也许时间戳可以转换成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']
字典本质上是不排序的,因此您可以创建包含键和值的元组列表
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']), ...]
现在你需要注意的是,因为你的时间戳是一个字符串,它可能不会按照你想要的方式进行排序。在这种情况下,您必须转换它。例如,一些函数到_datetime
lst = sorted(d.items(), key = lambda kvp: to_datetime(kvp[1][1]))
您是只希望对值进行排序,还是同时包含键?您期望的输出是什么样子的,您已经尝试过什么?@StevenSummers我更新了问题以进一步澄清。希望它现在更有意义。谢谢史蒂文!我甚至不需要使用日期-时间转换,你的第一个建议就做到了!你能详细解释一下你的lambda是如何工作的吗?最好通读一下文档,但你可以把它看作一个简单的函数。在这种情况下,您可以将其重写为
def key\u func(kvp):返回kvp[1][1]
和key=key\u func
。