python - 将字典中的值与多个匹配键进行比较
问题描述
我有两个字典,它们将产品 ID 存储为键,将时间戳存储为值。问题是我有重复具有唯一值的键。例如:
Dict1 | Dict2
ABCDEF: 12:39:00 | ABCDEF: 10:02:00
ABCDEF: 15:45:00 | ABCDEF: 16:40:00
ABCDEF: 18:30:00 | ABCDEF: 20:22:00
(实际上并没有以这种方式格式化,只是一种视觉表示。我的字典包含数千个值。)我使用以下方法对它们进行了比较:
comparison = {x: dict1[x] - dict2[x] for x in dict1 if x in dict2}
但这仅比较每个字典中匹配的最后一个键值。所以我得到了 01:52(一小时 52 分钟)的结果。如何包含其他键、值?
编辑:更新以包含更多代码。
dateList = []
filenameList = []
with open('File1.csv', 'r')as csvfile:
filereader = csv.reader(csvfile, delimiter=',')
next(filereader, None) #skip header row
for column in filereader:
# Extract the datetime info as a datetime object to use in timedelta
dateString = datetime.strptime(column[7], '%m/%d/%Y %H:%M').strftime('%Y-%m-%d %H:%M:%S')
dateObject = datetime.strptime(dateString, '%Y-%m-%d %H:%M:%S')
date1.append(dateObject)
# Extract filename
filename = column[1]
filenameList.append(filename)
# Zip the filenames and datetimes into a dictionary
combinedList = dict(zip(filenameList,dateList))
我真的对 File2 重复了所有这些,这就是比较的时候。
解决方案
正如 nicolishen 评论的那样,字典中的所有键都必须是唯一的。对于任何给定的键,您的 dict 将仅包含添加到原始列表对的最后一个值。
您将需要不同的数据结构。考虑一个包含每个产品 ID 的单个条目的字典。该条目的值可以是一对列表,每个列表都包含来自其中一个数据文件的时间戳信息。
productids_timestamps = {'ABCDEF':
(('12:39:00','15:45:00','18:30:00'), # File1.csv
('10:02:00','16:40:00','20:22:00'))} # File2.csv
推荐阅读
- python - 在每个火车时期后进行评估
- python - 从一个 python 脚本到另一个传递一个简单参数的简单调用
- java - 休息服务返回 204 而不是 200
- jquery - 数据表 ajax.reload() 和 .clear() 不工作
- java - 如何在 Java GUI 中使用文本字段作为输入来设置 RGB 值?
- php - $this 在将 PHP 升级到 7.1 时不起作用
- r - 按存储在列中的列表中的日期子集数据框
- azure-web-app-service - 我将我的 DNS 配置为通过指向我的 azurewebsites.net URL 的 CNAME 解析到我的 azure Web 应用程序并得到 404
- python-3.x - 从 Python 中的 google-images-download 结果中检索图像 URL
- java - MySQL J 连接器