有条件地改变python中内部字典的值

时间:2017-05-03 22:41:47

标签: python dictionary iteration

我在dict中有这个词,需要改变内部词组的值是“无”到“无”。所以它可以在csv文件中显示,而不是一个空白单元格。 例如:

{Object1 : {cellload : 1, cellthr : None, cellcap : 40}
Object2 : {cellload : None, cellthr : 2, cellcap : 40}
...
ObjectN : {cellload : None, cellthr : 5, cellcap : 50}}

所以,我不需要在csv文件中识别的无或NaN值,我需要'无'作为一个字符串。

我试过这个:

def replace(main_dif):
    for k, v in main_dif.items():
        for ki, ve in v.items():
            if ve is None:
                ve = "None"
            elif type(ve) == type(main_dif):
                replace(ve)
replace(main_dif)

而且:

outer = {}
for k, v in main_dif.items():
    inner = {}
    for ki, ve in v.items():
        if ve is None:
            ve == 'None'
        else:
            ve = ve
        inner.update({ki:ve})
    outer.update({k:inner})

并且没有像往常一样,就像我什么也没做。

1 个答案:

答案 0 :(得分:1)

一种选择就是强行通过所有对象的所有值并替换Nones。

for obj in objects:
    for k,v in obj.items():
        if v is None:
            obj[k] = 'None'

编辑尽可能使用python csv模块。

在这种情况下,我们可以创建一个自定义DictWriter来处理我们的None情况(根据数据可能需要调整)。

import csv

class NoneSafeWriter(csv.DictWriter):

    def _extract_val(self, rowdict, key):
        v = rowdict.get(key)
        return 'None' if v == None else v

    def _dict_to_list(self, rowdict):
        return [self._extract_val(rowdict, key) for key in self.fieldnames]

with open('output.csv', 'w') as csvfile:
    fieldnames = ['cellload', 'cellthr', 'cellcap']
    writer = NoneSafeWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(objects.values())