如何在Python中读取含重复条目的CSV并匹配字典中的对应值
修正Python CSV匹配代码以按订单顺序输出对应信息
你已经正确完成了从model.csv构建字典的部分,问题出在处理order.csv的逻辑上——当前代码是遍历models字典的键,而非遍历订单文件中的每一行记录,这就导致你既无法获取订单里的Quantity值,也没法保持order.csv的原有条目顺序。
下面是修正后的完整代码:
import csv MODEL = 0 BRAND = 1 VERSION = 2 def main(): models = model_numbers("model.csv", MODEL) # 保留原有的字典打印逻辑 for i in models: print(i, models[i]) # 处理order.csv的逻辑修正 with open("order.csv") as order_file: reader = csv.reader(order_file) next(reader) # 跳过表头 # 遍历每一行订单记录,而非遍历models的键 for row in reader: model_id = row[MODEL] quantity = row[1] # 订单里的第二列是Quantity # 从models字典中获取对应的品牌和版本 brand, version = models[model_id] # 按照要求格式输出 print(f"{brand}: {quantity} {version}") def model_numbers(filename, key): models = {} with open(filename, "rt") as models_file: reader = csv.reader(models_file) next(reader) for row in reader: model = row[MODEL] brand_name = row[BRAND] version = row[VERSION] models[model] = [brand_name, version] return models if __name__ == "__main__": main()
关键修改点说明:
- 把
for key in models.keys()改成了for row in reader,这样就能逐行读取订单里的内容 - 从每一行订单中提取
Model #和Quantity字段(注意订单里的第二列索引是1) - 通过订单中的Model编号,从
models字典中取出对应的品牌和版本,然后按要求格式拼接输出
运行这段代码后,输出就会和你期望的完全一致:
VB17 ['ASUS', '14.0'] AR51M ['ALIEN WARE', '15.5'] MAC12 ['APPLE', '13.7'] XR55 ['ACER', '17.1'] APPLE: 4 13.7 ALIEN WARE: 3 15.5 ACER: 1 17.1 APPLE: 2 13.7
内容的提问来源于stack exchange,提问作者user16313342
相关产品推荐
相关产品推荐

