按键排序字典 - 解包错误

时间:2017-04-12 14:35:38

标签: python sorting dictionary

我有一个字典,其中的键包含时间戳。基本上我想在那个时间戳上对字典进行排序;所以我可以获取与“第一个”时间戳对应的字典值。

我试过了:

router.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);

  console.log(req.headers.token);    
});

但那打印

from __future__ import print_function

from collections import OrderedDict
from datetime import datetime

def _fetch_ts(name):
    return datetime.strptime(name[-13:], '%Y%m%d_%H%M')

incoming_dict = {'20170410_1133': 'A', '20170412_1133': 'B'}
print("starting with: {}".format(incoming_dict))
sorted_dict = OrderedDict(sorted(incoming_dict, key=_fetch_ts))
print("gives        : {}".format(incoming_dict))
print("should be A or B: {}".format(sorted_dict.values()[0]))

那我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

你应该使用incoming_dict.items()来解压来自incoming_dict的值对。

_fetch_ts

如上所述,您还需要修改name[0][-13:],但您可以轻松引用{{1}}。

答案 1 :(得分:1)

您可以通过提前对其进行排序并将其重建为元组列表来重建OrderedDict。

像:

from __future__ import print_function

from collections import OrderedDict
from datetime import datetime

def _fetch_ts(name):
    val = datetime.strptime(name[-13:], '%Y%m%d_%H%M')
    return val

incoming_dict = {'20170410_1133': 'A', '20170412_1133': 'B'}
print("starting with: {}".format(incoming_dict))
print(sorted(incoming_dict, key=_fetch_ts))
sorted_dict = OrderedDict([(x,incoming_dict[x]) for x in sorted(incoming_dict, key=_fetch_ts)])
print("gives        : {}".format(incoming_dict))
print("should be A or B: {}".format(sorted_dict.values()[0]))