访问字典中的子字典中的值

Dee*_*k M 1 python dictionary data-structures

你好我有一个字典,看起来像这样:

dictionary = {'John': {'car':12, 'house':10, 'boat':3},
              'Mike': {'car':5, 'house':4, 'boat':6}}
Run Code Online (Sandbox Code Playgroud)

我希望获得访问权并提取子字典中的密钥,并将它们分配给这样的变量:

cars_total = dictionary['car']
house_total = dictionary['house']
boat_total = dictionary['boat']
Run Code Online (Sandbox Code Playgroud)

现在,当我运行上面的变量时,我得到一个'Key Error'.这是可以理解的,因为我需要首先访问外部字典.如果有人帮助了解如何访问密钥和子字典中的值,我会很感激,因为那些是我想要使用的值.

另外我想创建一个新密钥,这可能不对,但在这些方面的东西:

    car = dictionary['car']
    house = dictionary['house']
    boat = dictionary['boat']

dictionary['total_assets'] = car + house + boat 
Run Code Online (Sandbox Code Playgroud)

我希望能够访问字典中的所有键并创建新密钥.诸如"John"和"Mike"之类的外键都应该包含最后创建的键.我知道这会引发错误,但它会让你知道我想要实现的目标.感谢您的帮助

Tem*_*olf 6

将每个人的总资产相加并将其添加为新密钥:

for person in dictionary:
    dictionary[person]['total_assets'] = sum(dictionary[person].values())
Run Code Online (Sandbox Code Playgroud)

这将导致:

dictionary = {'John': {'car':12, 'house':10, 'boat':3, 'total_assets':25},
              'Mike': {'car':5, 'house':4, 'boat':6, 'total_assets':15}}
Run Code Online (Sandbox Code Playgroud)


jua*_*aga 6

我只想使用一个Counter对象来获得总数:

>>> from collections import Counter
>>> totals = Counter()
>>> for v in dictionary.values():
...     totals.update(v)
...
>>> totals
Counter({'car': 17, 'house': 14, 'boat': 9})
>>> totals['car']
17
>>> totals['house']
14
>>>
Run Code Online (Sandbox Code Playgroud)

即使密钥并不总是存在,这也可以很好地工作.

如果您想要总资产,则可以简单地对这些值求和:

>>> totals['total_assets'] = sum(totals.values())
>>> totals
Counter({'total_assets': 40, 'car': 17, 'house': 14, 'boat': 9})
>>>
Run Code Online (Sandbox Code Playgroud)