Python 如果新值是较晚的日期,则替换字典中的值

Python 如果新值是较晚的日期,则替换字典中的值,python,dictionary,Python,Dictionary,我想从列表中创建词典。如果找到较晚的日期,我希望替换该值 像这样: import datetime values=[['A',datetime.date(2017,1,1)], ['B',datetime.date(2001,2,2)], ['A',datetime.date(2017,10,21)], ['B',datetime.date(2005,6,3)]] d={} for (k,v) in values: if k not in

我想从列表中创建词典。如果找到较晚的日期,我希望替换该值

像这样:

import datetime

values=[['A',datetime.date(2017,1,1)],
        ['B',datetime.date(2001,2,2)],
        ['A',datetime.date(2017,10,21)],
        ['B',datetime.date(2005,6,3)]]
d={}

for (k,v) in values:
   if k not in d:
      d[k]=v
   else:
      if d[k]<v:
         d[k]=v

print(d)
{'B': datetime.date(2005, 6, 3), 'A': datetime.date(2017, 10, 21)}
导入日期时间
值=['A',datetime.date(2017,1,1)],
[B',datetime.date(2001,2,2)],
[A',datetime.date(2017,10,21)],
[B',datetime.date(2005,6,3)]]
d={}
对于(k,v)in值:
如果k不在d中:
d[k]=v
其他:

如果d[k]我认为您的代码是非常可读的,所以我不会试图强迫您理解字典。如果
语句稍微简化一点,可以简化一下

for (k,v) in values:
   if k not in d or d[k]<v:
      d[k]=v
对于(k,v)in值:

如果k不在d或d[k]中,如果将键、值对列表传递给
dict
,则如果存在重复的键,则保留最后一对。因此,您可以首先按照datetime值对列表进行排序,然后使用排序后的列表构建字典:

d = dict(sorted(values, key=lambda x: x[1]))

print(d)
{'A': datetime.date(2017, 10, 21), 'B': datetime.date(2005, 6, 3)}
编辑

正如@HåkenLid在评论中指出的,您不需要排序中的
函数,因为我们只关心第一个元素是否相同的顺序。所以我们可以说:

d = dict(sorted(values))
试试这个

{k[0]:k[1] for k in values}

具有三元条件的解

for k, v in values:
    d[k] = max(v, d[k]) if k in d else v
或者使用默认值的
dict.get()

for k, v in values:
    d[k] = max(v, d.get(k, v))

但为了让它更具可读性,我把它放在两行(我个人的偏好)+1不过,您不需要自定义键函数。在这种情况下,默认排序也起作用
dict(已排序(值))
如果
未排序,则不会给出正确的结果。