首页 > 解决方案 > 将字典中的值与多个匹配键进行比较

问题描述

我有两个字典,它们将产品 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 重复了所有这些,这就是比较的时候。

标签: pythonpython-2.7dictionary

解决方案


正如 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

推荐阅读