我试图将电子表格中的"1"值替换为"0"。由于工作流程的原因,我想在一个csv Dictreader对象中读取数据。然而,我对这种数据类型感到困惑,并得到相当得到的代码工作。下面是输入:
>>> print inreader
[{'PERSON1': '1', 'PERSON2': '1', 'GENE': 'TEST1', 'PERSON4': '1', 'PERSON3': '1'}, {'PERSON1': '1', 'PERSON2': '0', 'GENE': 'TEST2', 'PERSON4': '0', 'PERSON3': '0'}, {'PERSON1': '1', 'PERSON2': '0', 'GENE': 'TEST3', 'PERSON4': '0', 'PERSON3': '1'}, {'PERSON1': '0', 'PERSON2': '0', 'GENE': 'TEST4', 'PERSON4': '0', 'PERSON3': '0'}, {'PERSON1': '-', 'PERSON2': '0', 'GENE': 'TEST5', 'PERSON4': '-', 'PERSON3': '0'}, {'PERSON1': '2', 'PERSON2': '1', 'GENE': 'TEST9', 'PERSON4': '2', 'PERSON3': '1'}]
下面的代码将只更新适当的值,但我不知道如何根据这些规则更新整个Dictreader对象。
>>>for line in inreader:
>>> newline = [v.replace('1', '0') for k,v in line.items() ]
>>> print newline
['0', '0', 'TEST0', '0', '0']
['0', '0', 'TEST2', '0', '0']
['0', '0', 'TEST3', '0', '0']
['0', '0', 'TEST4', '0', '0']
['-', '0', 'TEST5', '-', '0']
['2', '0', 'TEST9', '2', '0']
理想情况下,我想创建一个新的"inreader"对象,用上面的值代替原来的值。
inreader = [{'PERSON1': '1', 'PERSON2': '1', 'GENE': 'TEST1', 'PERSON4': '1', 'PERSON3': '1'}, {'PERSON1': '1', 'PERSON2': '0', 'GENE': 'TEST2', 'PERSON4': '0', 'PERSON3': '0'}, {'PERSON1': '1', 'PERSON2': '0', 'GENE': 'TEST3', 'PERSON4': '0', 'PERSON3': '1'}, {'PERSON1': '0', 'PERSON2': '0', 'GENE': 'TEST4', 'PERSON4': '0', 'PERSON3': '0'}, {'PERSON1': '-', 'PERSON2': '0', 'GENE': 'TEST5', 'PERSON4': '-', 'PERSON3': '0'}, {'PERSON1': '2', 'PERSON2': '1', 'GENE': 'TEST9', 'PERSON4': '2', 'PERSON3': '1'}]
result = []
for line in inreader:
newline = dict([(k,v.replace('1', '0')) for k,v in line.items() ])
result.append(newline)
print result
结果是
[{'PERSON2': '0', 'PERSON3': '0', 'PERSON1': '0', 'PERSON4': '0', 'GENE': 'TEST0'}, {'PERSON2': '0', 'PERSON3': '0', 'PERSON1': '0', 'PERSON4': '0', 'GENE': 'TEST2'}, {'PERSON2': '0', 'PERSON3': '0', 'PERSON1': '0', 'PERSON4': '0', 'GENE': 'TEST3'}, {'PERSON2': '0', 'PERSON3': '0', 'PERSON1': '0', 'PERSON4': '0', 'GENE': 'TEST4'}, {'PERSON2': '0', 'PERSON3': '0', 'PERSON1': '-', 'PERSON4': '-', 'GENE': 'TEST5'}, {'PERSON2': '0', 'PERSON3': '0', 'PERSON1': '2', 'PERSON4': '2', 'GENE': 'TEST9'}]
不简单地替换line
的值?:
>>>for line in inreader:
... for k,v in line.items():
... line[k] = v.replace('1', '0')
... print line