我可以在python中编辑由dictreader创建的词典

时间:2014-08-06 02:18:50

标签: python

我正在尝试编辑由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创建的词典中的值?我是否以某种方式覆盖了所有这些?

1 个答案:

答案 0 :(得分:1)

  

如果我理解正确,它会创建一个词典列表。

没有; DictReader是一个迭代器,可在您请求时生成下一个字典。与所有Python迭代器一样(和常规文件对象迭代一样),如果尝试迭代两次,第二个循环将把迭代器视为空,因为迭代器不会在第一个循环后返回到开始。

如果您需要列表,请在其上调用list

elistable = list(csv.DictReader(open("./elispotable.csv", 'rU')))

然后,单独的循环将在列表上使用单独的迭代器。