Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改csv.DictReader类型中字典键的值_Python_Python 3.x_Csv_Dictionary - Fatal编程技术网

Python 更改csv.DictReader类型中字典键的值

Python 更改csv.DictReader类型中字典键的值,python,python-3.x,csv,dictionary,Python,Python 3.x,Csv,Dictionary,我试图调整从csv文件导入python字典的数据。(我使用了csv.DictReader())我认为DictReader创建了一个嵌套字典,每个子字典都是csv文件上的一行 我试图循环遍历每一行,更改与某些列名键对应的值 我尝试将其键入generator\u units\u dict[row][self.fom\u cost\u column]=任何计算,但这给了我一个错误:“DictReader”对象不可下标 def adjust_generator_data(self, generator_

我试图调整从csv文件导入python字典的数据。(我使用了
csv.DictReader()
)我认为DictReader创建了一个嵌套字典,每个子字典都是csv文件上的一行

我试图循环遍历每一行,更改与某些列名键对应的值

我尝试将其键入
generator\u units\u dict[row][self.fom\u cost\u column]=任何计算
,但这给了我一个错误:
“DictReader”对象不可下标

def adjust_generator_data(self, generator_units_dict):
       for row in generator_units_dict:
           row[self.fom_cost_column] = str(float(row[self.fom_cost_column])*1000)
           row[self.fom_other_cost_column] = str(float(row[self.fom_other_cost_column])*1000)
           row[self.fuel_cost_column] = str(float(row[self.fuel_cost_column])* float(row[self.heat_rate_column])/1000)
       return generator_units_dict
在这之后,当我像

对于发电机单元中的行:
打印(行)
我希望得到:

OrderedDict([('unity', '10'), ('regiony', '1'), ('capmwy', '1250'), ('fuelcosty', '26.851743334570003'), ('vomcosty', '2.17'), ('fomcosty', '30240.0'), ('vothery', '0'), ('fothery', '0.0'), ('heatratey', '7237.666667'), ('so2ratey', '0'), ('noxratey', '0.0730304'), ('availy', '0.8'), ('rmcfy', '1'), ('planttype1y', 'CC'), ('reg512y', 'NY_Z_J'), ('gwhty', '20408.04518'), ('gwhsy', '9543.262571'), ('tbtuty', '145.7268107'), ('unitcodey', '1'), ('winteravy', '0.8'), ('wshldravy', '0.8'), ('summeravy', '0.8'), ('noxmtonty', '1.064248685'), ('fuelsy', 'GA     DZ')])
orderedDict([('unity', '11'), ('regiony', '1'), ('capmwy', '1250'), ('fuelcosty', '26.851743334570003'), ('vomcosty', '2.17'), ('fomcosty', '30240.0'), ('vothery', '0'), ('fothery', '0.0'), ('heatratey', '7237.666667'), ('so2ratey', '0'), ('noxratey', '0.0730304'), ('availy', '0.8'), ('rmcfy', '1'), ('planttype1y', 'CC'), ('reg512y', 'NY_Z_J'), ('gwhty', '20408.04518'), ('gwhsy', '9543.262571'), ('tbtuty', '145.7268107'), ('unitcodey', '1'), ('winteravy', '0.8'), ('wshldravy', '0.8'), ('summeravy', '0.8'), ('noxmtonty', '1.064248685'), ('fuelsy', 'GA     DZ')])

但控制台上既不返回错误也不返回数据。

由于DictReader是一个生成器,因此自定义它的函数也应该是一个生成器

例如:

test.csv

a,b,c
1,.01,2
2,.02,3
3,.03,4
test.py

import csv

def customize(generator):
    for row in generator:
        row['a'] = int(row['a'])
        row['b'] = float(row['b']) * 100
        row['c'] = int(row['c'])
        yield row

with open('test.csv',newline='') as f:
    r = customize(csv.DictReader(f))
    for row in r:
        print(row)
输出:

OrderedDict([('a', 1), ('b', 1.0), ('c', 2)])
OrderedDict([('a', 2), ('b', 2.0), ('c', 3)])
OrderedDict([('a', 3), ('b', 3.0), ('c', 4)])

“我认为DictReader创建了一个嵌套字典,每个子字典都是csv文件上的一行。”它没有
DictReader
创建一个
DictReader
对象,它是表示csv中的行的
dict
对象的一个惰性元素。这就是为什么当您尝试为该对象下标时,它会抛出错误:
'DictReader'对象不可下标
您已经说明了当您执行
生成器单元[row][…]
时会出现什么错误,但是发布代码时会出现什么错误,即仅
row[…]
?我已更改了标题并尝试澄清输出。