将python词典键字符串转换为关键日期

时间:2015-02-03 15:20:42

标签: python for-loop dictionary

说你有一本字典:

a={'20101216':5,'20100216':1,'20111226':2,'20131216':5}

两个键具有相同的值。我如何打印最大关键日期(字符串)和值?像:

5 at 12/16/2013

我尝试for循环键和值并打印最大键和最大值,但它没有用完。

编辑:我最初开始尝试将字符串日期数组转换为日期对象。但它失败了[b]

b=['20101216','20100216','20111226','20131216']
c=[5,1,2,5]  

z=[]
        for strDate in b:
            g=[datetime.datetime.strptime(strDate, '%Y%m%d')]
            if g not in z:
                z.append(g)

然后从那里开始如果它工作了,我会在我的新数组[z]上做另一个for循环来正确格式化每个日期元素(m / d / y)。接下来,我会将两个数组压缩成字典。

像:

d = dict(zip(z,c))

哪会导致

d={12/16/2010:5,02/16/2010:1,12/26/2011:2,12/16/2013:5}

最后我会尝试找到最大日期键和最大值。并按原样打印出来:

5 at 12/16/2013

但由于转换数组b失败,我想可能从一开始就使用字典可能会产生更好的结果。

1 个答案:

答案 0 :(得分:1)

TL; DR:

max(a.items(), key = lambda x: (x[1], x[0]))

基本上,问题是您无法直接访问dict的值,而您仍需要对数据进行排序。因此,dict.items()为您提供了一个元组列表,即

a.items()
[('20101216', 5), ('20131216', 5), ('20111226', 2), ('20100216', 1)]

然后您只需要获得此列表的最大值。获得最大值的简单解决方案是 max func。由于您的问题稍微复杂一些,您应该利用max 参数(查看doc)并使用"复合"排序键。在这种情况下,lambda函数是一种解决方案。您可以表达任何需要排序的东西。因此,使用相应的优先级对元组内的2个值进行排序应为

max(l, key = lambda x: (x[1], x[0])) # where l is iterable with tuples