首页 > 解决方案 > 与 csv.DictReader 值不匹配/返回的变量

问题描述

我有一个关于如何将变量与 DictReader 标题和行匹配的问题。

我从 CSV 中设置了以下内容:

OrderedDict([('name', 'Bob'), ('cash', '2'), ('food', '8'), ('drink', '11')])
OrderedDict([('name', 'Mary'), ('cash', '3'), ('food', '9'), ('drink', '2')])

我也有从另一个文件中获取的变量。

maximum_number是最大重复类别的计数器,并且maximum_category是关联类别。

with open(database_name, newline='') as csvfile:
    dictionary = csv.DictReader(csvfile)
    for row in dictionary:
        if maximum_number in row[maximum_category]:
            print(row['name'])

例如,如果maximum_category是食物并且maximum_number是9,我想Mary从上述两组返回(从名称)。如果类别是饮料,数字是 11,我想返回Bob

我正在尝试使用 Python,所以我可能缺少一些基本的东西,但我想要一些关于为什么上述方法不起作用以及最好的解决方法的建议。

标签: pythoncsv

解决方案


您还没有确切说明您的代码如何“不起作用”,但对我来说似乎是这样。这是使用以下 .csv 文件的可运行示例:

name,cash,food,drink
Bob,2,8,11
Mary,3,9,2

代码:

import csv

database_name = 'ordered_dict_test.csv'

maximum_category = 'food'
maximum_number = '9'
with open(database_name, newline='') as csvfile:
    dictionary = csv.DictReader(csvfile)
    for row in dictionary:
        if maximum_number in row[maximum_category]:
            print(row['name'])

maximum_category = 'drink'
maximum_number = '11'
with open(database_name, newline='') as csvfile:
    dictionary = csv.DictReader(csvfile)
    for row in dictionary:
        if maximum_number in row[maximum_category]:
            print(row['name'])

并打印以下内容:

Mary
Bob

我怀疑问题可能没有意识到所有读取和返回的数据DictReader都是字符串。


推荐阅读