2013-03-04 45 views
7

Từ từ điển lồng nhau sau đây, làm cách nào tôi có thể nhận được mỗi khóa từ điển gốc của 'value4ac'? Bằng cách bắt đầu giá trị 'value4ac', tôi muốn nhận được 'key4', 'key4a', 'Key4ac'.Lấy các khóa cha mẹ từ từ điển lồng nhau

example_dict = { 'key1' : 'value1', 
       'key2' : 'value2', 
       'key3' : { 'key3a': 'value3a' }, 
       'key4' : { 'key4a': { 
             'key4aa': 'value4aa', 
             'key4ab': 'value4ab', 
             'key4ac': 'value4ac' 
            }, 
          'key4b': 'value4b' 
          } 
        } 
+0

Có một logic đằng sau tên khóa không? Ý tôi là, bạn có biết rằng '' key4ac'' sẽ nằm trong 'dict'" được tham chiếu "bởi' key4'? – Bakuriu

Trả lời

11

đệ quy để giải cứu!

example_dict = { 'key1' : 'value1', 
       'key2' : 'value2', 
       'key3' : { 'key3a': 'value3a' }, 
       'key4' : { 'key4a': { 'key4aa': 'value4aa', 
             'key4ab': 'value4ab', 
             'key4ac': 'value4ac'}, 
          'key4b': 'value4b'} 
       } 

def find_key(d, value): 
    for k,v in d.items(): 
     if isinstance(v, dict): 
      p = find_key(v, value) 
      if p: 
       return [k] + p 
     elif v == value: 
      return [k] 

print find_key(example_dict,'value4ac') 

cách thức hoạt động

Có vẻ qua các mục và kiểm tra 2 trường hợp

  • mục không phải là một cuốn từ điển - Trong trường hợp này, hãy xem nếu nó là giá trị chúng tôi 'Đang tìm kiếm. Nếu có, hãy trả về một danh sách chỉ chứa khóa. (Đây là trường hợp cơ sở của chúng tôi để đệ quy).
  • mục là từ điển - Thử tìm chìa khóa trong từ điển đó. Nếu nó được tìm thấy trong từ điển đó (hoặc bất kỳ dict phụ nào), hãy trả về khóa, nó sẽ dẫn đường dẫn đúng vào phần còn lại của đường dẫn.
+0

bởi 'def find_key (d, key):' bạn có nghĩa là 'def find_key (d, value):', đúng không? – zelusp

+0

@zelusp - Vâng, tên của biến đó là ... Không may. :-). Cám ơn vì sự gợi ý. – mgilson

Các vấn đề liên quan