在Python中对日期进行排序和格式化



我正在使用日期和时间的代码工作。我使用.sort()对元素进行排序,但我在日期和时间格式上有一些问题。

List_with_Dict=[
{'Date_Time': '06/12/20 14:1:43', 'Values': ' 46.2'},
{'Date_Time': '06/12/20 13:51:43', 'Values': ' 45.3'},
{'Date_Time': '06/12/20 1:21:47', 'Values': ' 23.0'},
{'Date_Time': '06/12/20 14:17:41', 'Values': ' 46.5'},
{'Date_Time': '06/12/20 13:59:19', 'Values': ' 46.1'},
{'Date_Time': '06/12/20 13:41:43', 'Values': ' 43.9'}]
List_with_Dict.sort(reverse=False, key=lambda e: e['Date_Time']) 
for elements in List_with_Dict:
print(elements)

输出为:

{'Date_Time': '06/12/20 13:41:43', 'Values': ' 43.9'}
{'Date_Time': '06/12/20 13:51:43', 'Values': ' 45.3'}
{'Date_Time': '06/12/20 13:59:19', 'Values': ' 46.1'}
{'Date_Time': '06/12/20 14:17:41', 'Values': ' 46.5'}
{'Date_Time': '06/12/20 14:1:43', 'Values': ' 46.2'}
{'Date_Time': '06/12/20 1:21:47', 'Values': ' 23.0'}

可以看到,最后两个字典格式不同,不能排序。有什么解决办法吗,比如换个日期格式?或者我需要在字典中工作以改变时间(h:m:s to hh:mm:ss)?

您可以使用这个for循环来纠正时间格式:

List_with_Dict=[
{'Date_Time': '06/12/20 14:1:43', 'Values': ' 46.2'},
{'Date_Time': '06/12/20 13:51:43', 'Values': ' 45.3'},
{'Date_Time': '06/12/20 1:21:47', 'Values': ' 23.0'},
{'Date_Time': '06/12/20 14:17:41', 'Values': ' 46.5'},
{'Date_Time': '06/12/20 13:59:19', 'Values': ' 46.1'},
{'Date_Time': '06/12/20 13:41:43', 'Values': ' 43.9'}]
for d in List_with_Dict:
date, time = d["Date_Time"].split()
time = ':'.join([i.ljust(2, '0') for i in time.split(':')])
d["Date_Time"] = f"{date} {time}"
print(List_with_Dict)

输出:

[{'Date_Time': '06/12/20 14:10:43', 'Values': ' 46.2'},
{'Date_Time': '06/12/20 13:51:43', 'Values': ' 45.3'},
{'Date_Time': '06/12/20 10:21:47', 'Values': ' 23.0'},
{'Date_Time': '06/12/20 14:17:41', 'Values': ' 46.5'},
{'Date_Time': '06/12/20 13:59:19', 'Values': ' 46.1'},
{'Date_Time': '06/12/20 13:41:43', 'Values': ' 43.9'}]

解释:

  1. 首先,遍历字典列表:
for d in List_with_Dict:
  1. 获取迭代的每个字典的"Date_Time"键的值,按空格分隔值,并分配生成两个字符串到两个变量作为日期字符串和时间字符串。
date, time = d["Date_Time"].split()
  1. 用冒号分隔时间字符串,用2个"0"s填充每个时间元素,并再次用冒号连接。
time = ':'.join([i.ljust(2, '0') for i in time.split(':')])
  1. 将值重新分配给每个字典的"Date_Time"键,使用转换后的时间字符串:
d["Date_Time"] = f"{date} {time}"

最新更新