Python嵌套字典替换为none并追加而不使用get

时间:2019-09-23 21:31:52

标签: python python-3.x pandas dictionary

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.

1 个答案:

答案 0 :(得分:1)

您的代码的传统Python习惯用法有点过头,您不想使用'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

实际上,目前还不清楚这是什么问题……您的清单应该是什么?真值? Dict值?