Python: How RECURSIVELY remove None values from a NESTED data structure (lists and dictionaries)?

后端 未结 5 1644
谎友^
谎友^ 2020-12-28 19:09

Here is some nested data, that includes lists, tuples, and dictionaries:

data1 = ( 501, (None, 999), None, (None), 504 )
data2 = { 1:601, 2:None, None:603, \         


        
5条回答
  •  执念已碎
    2020-12-28 19:53

    def stripNone(data):
        if isinstance(data, dict):
            return {k:stripNone(v) for k, v in data.items() if k is not None and v is not None}
        elif isinstance(data, list):
            return [stripNone(item) for item in data if item is not None]
        elif isinstance(data, tuple):
            return tuple(stripNone(item) for item in data if item is not None)
        elif isinstance(data, set):
            return {stripNone(item) for item in data if item is not None}
        else:
            return data
    

    Sample Runs:

    print stripNone(data1)
    print stripNone(data2)
    print stripNone(data3)
    print stripNone(data)
    
    (501, (999,), 504)
    {'four': 'sixty', 1: 601}
    {12: 402, 14: {'four': 'sixty', 1: 601}}
    [[22, (), ()], ((202,), {32: 302, 33: (501, (999,), 504)}, {12: 402, 14: {'four': 'sixty', 1: 601}})]
    

提交回复
热议问题