Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典按带有时间戳的值对键进行排序_Python_Sorting_Dictionary - Fatal编程技术网

Python字典按带有时间戳的值对键进行排序

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,

我有一本字典,里面有天线收集的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)排序的列表。。我该怎么做呢

我发现了一个与的“类似”问题,其中使用了带有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