csv.DictReader值不匹配/不匹配的变量

时间:2020-09-27 22:02:09

标签: python csv

我有一个关于如何将变量与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,因此我可能缺少一些基本知识,但是我想就上述方法为何行不通以及解决该问题的最佳方法提供一些建议。

1 个答案:

答案 0 :(得分:1)

您尚未确切说明代码“将不起作用”的方式,但对我而言似乎如此。这是使用以下.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读取和返回的所有数据都是字符串。