我正在尝试编辑由dictreader创建的词典中的值。如果我理解正确,它会创建一个字典列表。这部分工作正常。但是,我想更改某些字典中键:值对的某些值,这不符合我的预期。编辑完值后,我的dictreader对象似乎完全是空的。
为了解决这个问题,我创建了一个空列表(elis),然后用dictreader对象中的所有字典填充它。
我的代码如下:
import csv
import numpy as np
import pandas as pd
# Load the csv into a dictreader object
elistable = csv.DictReader(open("./elispotable.csv", 'rU'))
# This code will print all the dictionaries when uncommented
# for item in elis:
# print item
# Create an empty list
elis=[]
#Note that the dicts have keys including 'Control' and 'Peptide Id'
for item in elistable:
if item['Control']=='Neg':
item['Peptide Id']='Neg'
if item['Control']=='Pos':
item['Peptide Id']='Pos'
elis.append(item)
#Elis is now full with all the dictionaries and correct values that were edited in the for loop
dude=[]
for item in elistable:
dude.append(item)
print dude
Dude完全是空的,如果我尝试运行for循环来打印elistable的dicts,那么什么都不打印。它在我使用if语句运行for循环之前有效,但之后没有。它现在似乎完全是空的。
是否可以编辑dictreader创建的词典中的值?我是否以某种方式覆盖了所有这些?
答案 0 :(得分:1)
如果我理解正确,它会创建一个词典列表。
没有; DictReader是一个迭代器,可在您请求时生成下一个字典。与所有Python迭代器一样(和常规文件对象迭代一样),如果尝试迭代两次,第二个循环将把迭代器视为空,因为迭代器不会在第一个循环后返回到开始。
如果您需要列表,请在其上调用list
:
elistable = list(csv.DictReader(open("./elispotable.csv", 'rU')))
然后,单独的循环将在列表上使用单独的迭代器。