如何在Python中复制字典的结构并将最里面的值设置为None?

时间:2019-05-08 15:36:51

标签: python dictionary copy

说我有以下字典

{'g_g': {'cube': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
         'factorization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
         'renormalization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
         'square': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j])},
 'q_g': {'12': {'cube': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
                'factorization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
                'renormalization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
                'square': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j])},
         '21': {'cube': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
                'factorization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
                'renormalization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
                'square': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j])}},
 'q_q': {'cube': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
         'factorization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
         'renormalization': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j]),
         'square': array([1.+3.j, 2.+4.j, 3.+5.j, 4.+6.j])}}

如何复制字典的所有键并将最里面的值设置为None?各地的结构都不尽相同,因此很难为其编写一个统一的循环。我知道deepcopy可以做到,但它也会复制值。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果要删除字典的数组部分,可以在使用deepcopy之后使用以下内容。

# Suppose ar is the dictionary you get after using deepcopy
def func(ar):
    for i in ar:
        if type(ar[i]) != dict:
            ar[i] = None
        else:
            func(ar[i])