【问题标题】:Remove dictionary if we have value is nan/None/NaN/null for key using python如果我们的值是 nan/None/NaN/null 使用 python 的键,则删除字典
【发布时间】:2022-01-06 05:18:14
【问题描述】:

如果 key 的值为 nan/None/NaN/null ,我想删除字典。如果 nan 是 phone_type 工作的唯一值,则删除整个字典本身。

输入数据

dic = ['Customer_Number': 12345,'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [1217]}, {'Phone_Type': 'work', 'Phone': [nan]}]]

预期输出数据

dic = ['Customer_Number': 12345,'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [1217]}]]

代码尝试

#define which elements you want to remove:
to_be_deleted = [[], {}, "", None, "nan",nan, "NaN", NaN]


def remove_empty_elements(jsonData):
    if isinstance(jsonData, list):
        print("jsonDAta:", jsonData)
        jsonData = [remove_empty_elements(elem) for elem in jsonData
                    if remove_empty_elements(elem) not in to_be_deleted]

    elif isinstance(jsonData, dict):
        jsonData = {key: remove_empty_elements(value) for key, value in jsonData.items()
                    if remove_empty_elements(value) not in to_be_deleted}


        if len(jsonData) == 1:
            return None

    return jsonData

res = remove_empty_elements(dic)

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    示例解决方案:

    to_delete = [ None, [None], "", None, "nan", "NaN"]
    
    dic = {'Customer_Number': 12345,'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [1217]}, {'Phone_Type': 'work', 'Phone': [None]}]}
    
    for key in dic.keys():
        if isinstance(dic[key], list):
            for item in dic[key]:
                if isinstance(item, dict):
                    item_keys =  list(item.keys())
                    for key_2 in item_keys:
                        if item[key_2] in to_delete:
                            del item[key_2]
    

    输出

    {'Customer_Number': 12345, 'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [1217]}, {'Phone_Type': 'work'}]}
    

    进行相应更改以捕获更多案例。仅当您将字典列表作为顶级键的值时,此选项才有效

    【讨论】:

    • dic 是词典列表。
    • @NaveenGupta dic = ['Customer_Number': 12345,'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [1217]}]] 你不能拥有这个
    • 没有进入最后一个 if 语句。 if item[key_2] in to_delete:
    • 上面的例子你运行了吗?
    • 是的,我运行了上面的代码。它没有进入那个 if 条件
    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2020-03-11
    • 2018-12-04
    • 2020-09-23
    • 2021-07-30
    相关资源
    最近更新 更多