关于在Python3的嵌套字典中调用值的概念问题

关于在Python3的嵌套字典中调用值的概念问题,python,dictionary,for-loop,Python,Dictionary,For Loop,我必须找到一种方法,首先使用for循环,然后使用sum函数和dictionary comprehension,在一行中找到嵌套字典中某些值的总和 我不能假设字典是有序的,也不能假设它们的大小相同,但我可以假设每个嵌套的TARGET key:value对具有相同的密钥名。下面是一个模拟示例字典: dict1 = { "key 1" : { "key1a" : "abcde",

我必须找到一种方法,首先使用for循环,然后使用sum函数和dictionary comprehension,在一行中找到嵌套字典中某些值的总和

我不能假设字典是有序的,也不能假设它们的大小相同,但我可以假设每个嵌套的TARGET key:value对具有相同的密钥名。下面是一个模拟示例字典:

dict1 = { "key 1" :
                { "key1a" : "abcde",
                "key_b_name" : 6, #take this value and add it to a running total
                "key1c" : [list1]},
            "key 2" :
                { "key2a" : "abcde",
                "key_b_name" : 32, #take this value and add it to a running total
                "key2c" : [list2]}
             ...
            }
我的for循环应该会遍历任何出现的其他字典。解决这个问题的天真方法是什么

我对for循环的思考过程首先是设置一个名为running_total=0的变量,然后我希望for_循环遍历dict1中的每个字典,并
running total+=dict1[key_b_name]
然后最后打印运行总数。如果我使用此方法,是否缺少调用嵌套字典的索引,如果是,语法是什么

然后,我仍在尝试理解list/dict的诀窍,因此我需要理解如何用一行使用sum函数的代码替换for循环

In [11]: dict1
Out[11]:
{'key 1': {'key1a': 'abcde', 'key1b': 6, 'key1c': ['a']},
 'key 2': {'key2a': 'abcde', 'key2b': 32, 'key2c': ['c']}}

In [12]: sum(v[i] for k,v in dict1.items() for i in v if i.startswith("key") and i.endswith("b"))
Out[12]: 38
更新: 由于键名保持不变

In [17]: dict1
Out[17]:
{'key 1': {'key1a': 'abcde', 'key_b_name': 6, 'key1c': ['a']},
 'key 2': {'key2a': 'abcde', 'key_b_name': 32, 'key2c': ['a']}}

In [18]: sum(v[i] for k,v in dict1.items() for i in v if i == "key_b_name")
Out[18]: 38
输出:

38

我对Python非常陌生,但我想我被告知不能将索引值与字典键名一起使用对于每个键名。如果我可以使用索引号,这会容易得多,我假设你告诉我我可以?我可以使用索引,因为首先我只获取值,然后我将它们转换为列表。如果你不熟悉Python,那么你就学习字典,你应该学习keys()和values()啊!我明白了!我没有注意代码行外的括号!这是否意味着我理解正确-我不能用字典调用索引位置?编辑:我今晚真的没有注意,对不起,你甚至使用了list命令。我认为这个解决方案应该适用于所有情况。非常感谢你的解释!谢谢无法直接使用字典的索引,即使您仅获取键或值。例如:
some\u dictionary.values()[0]
此错误仍然存在。您需要将它们转换为列表。正确的:
list(some\u dictionary.values())[0]
我刚联系助教,似乎我的假设不正确。嵌套字典的顺序和大小不是恒定的/无法假设。但是我们可以假设每个字典的key:value对都是相同的。我想我需要用for循环和list comprehension速记重新编写这个。这这是一个非常有趣的方法,但唯一的问题是我不确定这些键是以“key”开头还是以“b”结尾“这更像是一本关于这个概念的模拟词典,所以我可以学习这个方法。”。“我还在试图把我的头脑集中在列表/听写理解上。”@snicksnackpaddyhack91如果你不知道这些键是什么,你怎么可能知道该用哪个键呢?你说:
我想得到所有keyb值的总和
@MarkMeyer是的,这就是我遇到的问题。有问题的提示符只有完整的第一个包含5个键:值对的字典,然后给了我一个“…”并告诉我写一行代码来查找所有隐含字典的总数。我相信这更像是一个概念问题,在任何情况下都应该适用。编辑:“我想得到所有keyb值的总数”我的意思是,我想得到这些关键位置的每个值的总数。很抱歉,没有clarity@MarkMeyer,我向助教求助,我对字典的假设是错误的(我假设顺序和大小是恒定的),但我唯一能假设的是,我所查看的特定键:值对在每个嵌套字典中都是相同的。他建议我先查看扩展的for循环,然后使用列表再次尝试。关于如何解决这个问题有什么建议吗?@SnicksnackPaddyHack91我鼓励编辑这个问题,并按照任务中的要求将确切的要求放在那里最大嵌套深度是一个?是的,有一个最重要的指令1,然后它有嵌套的字典,但仅此而已。
38