Python 变量与csv.DictReader值不匹配/不返回
我有一个关于如何将变量与读取器标题和行匹配的问题 我从CSV中设置了以下内容: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
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'])