1 Câu hỏi: Làm cách nào để sao chép cấu trúc của một từ điển trong Python và đặt các giá trị trong cùng thành Không?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Nói rằng tôi có một từ điển như sau

{'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])}}

Làm cách nào tôi có thể sao chép tất cả các khóa của từ điển và đặt giá trị trong cùng là None? Cấu trúc không giống nhau ở mọi nơi và do đó thật khó xử khi viết một vòng lặp thống nhất cho nó. Tôi biết deepcopy có thể làm điều đó, nhưng nó cũng sẽ sao chép các giá trị.

Cảm ơn trước!

    
0
  1. Có lý do gì bạn không thể sử dụng deepcopy và sau đó gán lại giá trị trong cùng thành None?
    2019-05-08 15: 39: 00Z
  2. @ JohnGordon Tôi có thể không nhất thiết phải biết cấu trúc của nó và tôi muốn chương trình tự tìm ra nó.
    2019-05-08 22: 11: 30Z
1 Câu trả lời                              1                         

Nếu bạn muốn xóa phần mảng của từ điển, bạn có thể sử dụng phần sau đây sau khi sử dụng 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])
    
2
2019-05-08 16: 02: 40Z
nguồn đặt đây