Python 变量与csv.DictReader值不匹配/不返回

Python 变量与csv.DictReader值不匹配/不返回,python,csv,Python,Csv,我有一个关于如何将变量与读取器标题和行匹配的问题 我从CSV中设置了以下内容: OrderedDict([('name', 'Bob'), ('cash', '2'), ('food', '8'), ('drink', '11')]) OrderedDict([('name', 'Mary'), ('cash', '3'), ('food', '9'), ('drink', '2')]) 我还有从另一个文件中获取的变量 maximum_number是最大重复类别的计数器,maximum_cat

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

我从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\u category
是食品,而
maximum\u number
是9,我想从上述两组中返回
Mary
(来自name)。如果类别是饮料,数字是11,我想返回
Bob


我正在用Python进行实验,所以我可能缺少一些基本的东西,但是我想知道为什么上面的方法不起作用,什么是最好的方法。

< p>你还没有确切地指出你的代码是怎么工作的,但是对我来说似乎是这样。下面是一个使用以下.csv文件的可运行示例:

姓名、现金、食物、饮料
鲍勃,2,8,11
玛丽,3,9,2
代码:

并打印以下内容:

Mary
上下快速移动

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

您没有说明是收到了错误消息还是只是意外的结果-因为没有给出
最大值的定义,所以无法说出您收到的是哪一个。但是,
row[maximum\u category]
中的maximum\u number可能没有达到您的预期,
row[maximum\u category]
是一个字符串,根据您提供的示例数据,因此,
row[maximum\u category]
中的x将查看
x
是否在该字符串中。如果
x
是一个整数(如您所建议的),这将导致一个错误,如果它是一个字符串,Python将返回
x
是该字符串的子字符串,这也不是您想要的。@Grismar您完全正确。我忽略了将整数值转换为字符串,现在通过一个简单的str(maximum_number)解决了这个问题。我真傻,竟然忘了,非常感谢。我在评论的其他地方写过,但你是对的。我的问题是最大值是一个整数而不是一个字符串。str(最大_数)解决了这个问题。
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'])