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

标签 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 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)}

必须有一种更简单、代码更少的方法。我怎样才能更有效地做到这一点,也许可以通过字典理解?

最佳答案

如果将键、值对列表传递给 dict,如果存在重复的键,它会保留最后一对。因此,您可以首先按日期时间值对列表进行排序,然后使用该排序列表构建字典:

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 在评论中指出的那样,您不需要 sorted 中的 key 函数,因为我们只关心第一个元素相同的顺序。所以我们只能说:

d = dict(sorted(values))

关于python - 如果新值是较晚的日期,则替换字典中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037391/

相关文章:

Python - pdfkit 的超时规则

python - 字符串/字典/列表索引的短名称

r - 如何将原始输入转换为 R 中的索引值

python - "ProgrammingError: column "genre_id "of relation "music_album "does not exist"而该列确实存在

python - Pandas 合并两个没有某些列的数据框

python - 使用 python 正则表达式从字符串中提取名称

python 子进程: check to see if the executed script is asking for user input

Python基于key合并嵌套对象

python - 如何获取所有字典值(字符串)的总长度

c# - IDictionary<TKey, TValue> 的 LINQ?有没有我似乎找不到的 AddIf?