将 Python 字典密钥字符串转换为密钥日期



假设你有一本字典:

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 失败,我想也许从一开始就使用字典可能会产生更好的结果。

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关键参数(查看文档)并使用"复合"排序键。在这种情况下,lambda 函数是一种解决方案。您可以表达您需要排序的任何东西。因此,在元组内按 2 个具有相应优先级的值排序应该是

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

最新更新