2014-11-25 22 views
5

Tôi đang cố gắng cập nhật các giá trị trong từ điển lồng nhau mà không ghi đè các mục trước đó khi khóa đã tồn tại. Ví dụ, tôi có một cuốn từ điển:Cập nhật từ điển lồng nhau khi dữ liệu có khóa hiện tại

myDict = {} 
    myDict["myKey"] = { "nestedDictKey1" : aValue } 

hiến,

print myDict 
>> { "myKey" : { "nestedDictKey1" : aValue }} 

Bây giờ, tôi muốn thêm entry khác, dưới "myKey"

myDict["myKey"] = { "nestedDictKey2" : anotherValue }} 

này sẽ trở lại:

print myDict 
>> { "myKey" : { "nestedDictKey2" : anotherValue }} 
.210

Nhưng tôi muốn:

print myDict 
>> { "myKey" : { "nestedDictKey1" : aValue , 
       "nestedDictKey2" : anotherValue }} 

Có cách nào để cập nhật hoặc thêm "myKey" với các giá trị mới, mà không ghi đè lên những người trước đó?

Trả lời

5

Hãy thử một cái gì đó như thế này:

try: 
    myDict["myKey"]["nestedDictKey2"] = anotherValue 
except KeyError: 
    myDict["myKey"] = {"nestedDictKey2": anotherValue} 

Mẫu đó sẽ thêm khóa vào từ điển lồng nhau hiện có hoặc cre ăn một từ điển lồng nhau mới nếu nó không tồn tại.

0
myDict["myKey"]["nestedDictKey2"] = anotherValue 

myDict["myKey"] trả về từ điển lồng nhau mà chúng ta có thể thêm phím khác như chúng tôi làm cho bất kỳ từ điển :)

Ví dụ:

>>> d = {'myKey' : {'k1' : 'v1'}} 
>>> d['myKey']['k2'] = 'v2' 
>>> d 
{'myKey': {'k2': 'v2', 'k1': 'v1'}} 
5

Bạn có thể sử dụng collections.defaultdict cho việc này và chỉ đặt cặp khóa-giá trị trong từ điển lồng nhau.

from collections import defaultdict 
my_dict = defaultdict(dict) 
my_dict['myKey']['nestedDictKey1'] = a_value 
my_dict['myKey']['nestedDictKey2'] = another_value 

Ngoài ra, bạn cũng có thể viết những dòng cuối cùng 2 như

my_dict['myKey'].update({"nestedDictKey1" : a_value }) 
my_dict['myKey'].update({"nestedDictKey2" : another_value }) 
Các vấn đề liên quan