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

标签 python dictionary iteration

我在 dict 中有字典,需要将内部字典的值从 None 更改为“None”,以便它可以显示在 csv 文件中,而不是空白单元格。 示例:

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

所以,我不需要 None 或 NaN 值,这些值在 csv 文件中无法识别,我需要“None”作为字符串。

我已经尝试过这个:

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})

和往常一样,没有人在那里,就像我什么也没做一样。

最佳答案

一种选择是暴力破解所有对象的所有值并替换 None。

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())

关于python - 有条件地改变Python中内部字典的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43771147/

相关文章:

python - python 2.7 中的 string_builder 装饰器 - 如何做以及我应该做吗?

python - 使用GIL和多线程处理嵌入式Python解释器调用

python - 如何在 Python 客户端和 C++ 服务器上使用套接字

Python 美丽汤 : Removing specific element in element

c# - 在 C# 中,为什么 dictionary[0]++ 有效?

c# - 遍历从 C# 传递的未知 C 结构

python - 从字典更新列中组的值

arrays - 数组到字典(无循环)

java - 迭代 Collection,避免在循环中删除对象时出现 ConcurrentModificationException

java - 在 for 循环中重命名文件时出错