试图从csv生成字典,但结果为空

2024-04-20 10:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的第一篇堆栈溢出文章,请理解。我是Python新手,正在尝试Eric Matthes的Python速成课程第二版中的练习16-7,在练习中,我获得了一个csv数据集,并创建了一个程序,将相关数据放入字典中,然后我可以用它制作一个地图来显示数据

我的问题是,我存储在变量中要放入字典的数据似乎没有进入,使字典为空,从而阻止我创建地图来显示数据。希望你能从下面的代码中明白我的意思

# data into list
filename = 'API_SP.DYN.TFRT.IN_DS2_en_csv_v2_1622869.csv'
with open(filename, encoding='utf-8-sig') as f:
    reader = csv.DictReader(f)
    next(reader)
    next(reader)
    for row in reader:
        country_name = row['Data Source']
        # '.strip() or 0' part used to ensure fertility data can be read into fertility without       
        # error caused by blank '' strings in the data.
        # Has to be 'row[None]' to avoid KeyError
        fertility = float(row[None][-4].strip() or 0)
        code = get_country_code(country_name)
        if code:
            print(code + ': ' + str(fertility))
        else:
            print('ERROR - ' + country_name)

# build dictionary of population data
fertility_2018_data = {}
for row in reader:
    country_name = row['Data Source']
    fertility = float(row[None][-4].strip() or 0)
    code = get_country_code(country_name)
    if code:
        fertility_2018_data[code] = fertility

当我尝试“打印(生育率数据)”时,我只得到一个空白的{}字典

我为这一大块道歉,但我想说得更全面一些。这是在尝试了一些事情来修复它之后的代码,包括添加“with open(filename,etc)as f:”位,希望添加该部分可以使文件正确关闭

坦率地说,我很困惑,到目前为止,我在网上找到的任何东西都没有真正帮助我解决这个问题。如果需要的话,我可以试着编辑文章,如果它有助于解决这个问题的话,我可以用一个指向.csv文件的链接。我认识到我的代码可能杂乱无章,效率低下,所以任何其他批评都是可以的


Tags: orcsv数据代码nameindata字典
1条回答
网友
1楼 · 发布于 2024-04-20 10:30:04

csv.DictReader返回只能迭代一次的生成器对象。您已经在下面几行中对其进行了迭代

    for row in reader:

当您第二次使用“for row in reader”时,没有什么可重复的

我将使用的解决方案是将生成器中的所有内容存储到局部变量中。比如:

local_var = []
for row in reader:
    local_var.append(row)

然后在下游使用这个局部变量。或者,您可以再次初始化读取器,将其连接到文件,然后填充“生育率数据”

相关问题 更多 >