繁体   English   中英

如何通读 csv 文件以在 Python 中的字典中找到相应的值?

[英]How to read through a csv file to find corresponding values in a dictionary in Python?

我正在尝试通读 csv 文件以在字典中找到相应的值。 我有两个 csv 文件。 我必须用第一个 csv 文件创建一个字典。 然后我必须通读另一个 csv 文件以找到我用第一个 csv 文件创建的字典的匹配或对应值,但我无法从第二个 csv 文件中创建字典,因为第二个 csv 文件将有重复在它里面(MAC12,4 和 MAC12,2)。

这就是第一个 csv 文件的样子。

Model #,Brand,Version
VB17,ASUS,14.0
AR51M,ALIEN WARE,15.5
MAC12,APPLE,13.7
XR55,ACER,17.1

这是第二个 csv 文件的样子。

Model #,Quantity
MAC12,4
AR51M,3
XR55,1
MAC12,2

然后我需要在我的输出中按照它们在第二个 csv 文件中出现的顺序显示品牌、数量和版本,如下所示:

APPLE: 4 13.7
ALIEN WARE: 3 15.5
ACER: 1 17.1
APPLE: 2 13.7

这是我的代码到目前为止的样子:

import csv

MODEL = 0
BRAND = 1
VERSION = 2 

def main():
    
    models = model_numbers("model.csv", MODEL)
    for i in models:
        print(i, models[i])

    with open("order.csv", ) as order_file:
        reader = csv.reader(order_file)
        next(reader)
        for key in models.keys():
            value = models[key]
            brand = value[0]
            quantity = value[1]

            print(f"{brand}: {quantity}")


def model_numbers(filename, key):

    models = {}
    with open(filename, "rt") as models_file:
        reader = csv.reader(models_file)
        next(reader)
        for key in reader:
            model = key[MODEL]
            brand_name = key[BRAND]
            version = key[VERSION]
            models[model] = [brand_name, version]
    
    return models 

if __name__ == "__main__":
    main()

这是我当前输出的样子:

VB17 ['ASUS', '14.0']
AR51M ['ALIEN WARE', '15.5']
MAC12 ['APPLE', '13.7']     
XR55 ['ACER', '17.1']       
ASUS: 14.0
ALIEN WARE: 15.5
APPLE: 13.7
ACER: 17.1

而这正是我想要的。

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

这是我尝试使用您提供的有关文件和所需输出的信息:

import csv

def get_model_quantity():
    models = []
    with open("file_2.csv", "r") as f_in:
        reader = csv.reader(f_in, delimiter=",")
        next(reader)
        for row in reader:
            model = row[0]
            quantity = row[1]
            models.append((model, quantity))
    return models

def get_model_information():
    info = {}
    with open("file_1.csv", "r") as f_in:
        reader = csv.reader(f_in, delimiter=",")
        next(reader)
        for row in reader:
            model = row[0]
            brand = row[1]
            version = row[2]
            info[model] = {
                "brand": brand,
                "version": version
            }
    return info


model_quantity = get_model_quantity()
model_information = get_model_information()

for model, quantity in model_quantity:
    model_info = model_information[model]
    brand = model_info["brand"]
    version = model_info["version"]
    print(f"{brand}: {quantity} {version}")

输出:

APPLE: 4 13.7
ALIEN WARE: 3 15.5
ACER: 1 17.1
APPLE: 2 13.7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM