【问题标题】:Python nested dictionary replace with none and append without using getPython嵌套字典用none替换并在不使用get的情况下追加
【发布时间】:2020-01-23 23:56:09
【问题描述】:
if 'value1' in results_dict:
    if results_dict['value1'] is not None:
        if results_dict['value1']['limit'] is None:
            res.append(results_dict['value1']['limit'] == "Nan")
        else:
            res.append(results_dict['value1']['limit'])
    else:
        res.append(results_dict['value1']['limit'] == "Nan")
else:
    res.append("Nan")

我正在尝试解决不允许我将值附加到“res”的问题 (res.append(results_dict['value1']['limit'] == "Nan"))

I am getting TypeError: 'NoneType' object is not subscriptable
I am trying to check if there is a None value and replacing it with NaN. I also want to keep the key 
names. I also used .get twice but that gave me an Attribute Error.

【问题讨论】:

    标签: python python-3.x pandas dictionary


    【解决方案1】:

    您的代码的传统 Pythonic 习语有点偏离,您不想使用 'is None',(list of things Python returns as None),而且,对于 nan 测试,您需要导入数学。我相信这就是您正在寻找的:

    import math
    
    if 'value1' in results_dict:
        if results_dict['value1']:  #is not None just means it exists, so eliminate that
            if not results_dict['value1']['limit']: #is None just means not
                temp = {'limit':math.nan} #create new dict
                results_dict['value1'].update(temp) #update your level 1 nested dict
                res.append(math.isnan(results_dict['value1']['limit'])) #correct nan test
            else:
                res.append(results_dict['value1']['limit'])
        else:
            res.append(math.isnan(results_dict['value1']['limit'])) #correct test for nan
    else:
        res.append(math.nan) #correct assignment of nan
    

    另请参阅: Assigning a variable NAN in Python

    编辑:如果您不打算专门指定 NAN,那么您的代码可以大大简化。

    if 'value1' in results_dict:
        if results_dict['value1']:
            if results_dict['value1']['limit']:
                res.append(results_dict['value1']['limit'])
        else:
            res.append('')
    else:
        res.append('') #correct assignment of nan
    

    实际上并不清楚这里的问题是什么......你的 res 应该是什么列表?真理价值观?字典值?

    【讨论】:

    • 谢谢!我不想添加楠。它可以是空的。
    • 在这种情况下,只需使用一个空字符串、两个单引号来代替 math.nan。尽管那是您要测试的内容,不是吗?因此,您可以消除大部分内部 if 语句,只需将内部 'else:' 变为 'if results_dict['value1']['limit']:' 然后将所有其他 res.append(...) 变为 res .append('') (或 res.append(0) 如果这在您的代码中更有意义,即 res 是字符串列表还是数字列表?)
    • res 就是需要所有这些字典值。字典值来自 JSON 配置文件。最终目标是创建一个数据框。
    猜你喜欢
    • 2015-05-28
    • 2022-01-04
    • 1970-01-01
    • 2023-01-23
    • 2018-04-19
    • 2016-06-29
    • 2019-01-25
    • 2013-11-19
    • 2019-09-06
    相关资源
    最近更新 更多