Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典在循环中未按预期更新_Python_Loops_Dictionary_Iteritems - Fatal编程技术网

Python字典在循环中未按预期更新

Python字典在循环中未按预期更新,python,loops,dictionary,iteritems,Python,Loops,Dictionary,Iteritems,我正在努力创建一本词典,其中总结了另一本词典。我希望仅当关键字与详细信息中的“父项”值匹配时,才会更新摘要摘要摘要。我所写的内容似乎不像我预期的那样访问摘要摘要摘要。print语句显示它一直附加到循环中的第一个iterable,而不是从summary_dict中获取正确的值 detail_dict = {'a123': {"data": [1, 2, 3, 4], "parent": "a"}, 'a124': {"data": [1, 2, 3, 4, 5], "

我正在努力创建一本词典,其中总结了另一本词典。我希望仅当关键字与详细信息中的“父项”值匹配时,才会更新摘要摘要摘要。我所写的内容似乎不像我预期的那样访问摘要摘要摘要。print语句显示它一直附加到循环中的第一个iterable,而不是从summary_dict中获取正确的值

detail_dict = {'a123': {"data": [1, 2, 3, 4], "parent": "a"},
               'a124': {"data": [1, 2, 3, 4, 5], "parent": "a"},
               'b123': {"data": [1, 2, 3], "parent": "b"},
               'b124': {"data": [1], "parent": "b"}}

summary_dict = dict.fromkeys(["a", "b"], {"data": [],
                                          "data_len": []})

for k, v in detail_dict.iteritems():
    summary_dict[v['parent']]["data"].append(v["data"])
    summary_dict[v['parent']]["data_len"].append(len(v["data"]))
    print "\nMy value is "
    print v
    print "\nMy summary dictionary now looks like:"
    print summary_dict[v['parent']]
我想要的结果字典是:

{"a": {"data": [[1, 2, 3, 4], [1, 2, 3, 4, 5]],
       "data_len": [4, 5]},
 "b": {"data": [[1, 2, 3], [1]],
       "data_len": [3, 1]}}

您正在从_keys向
传递一个可变参数,以便在键之间复制引用

按如下方式创建dict,以便为每个键创建一个单独的ref:

summary_dict = {x : {"data": [],"data_len": []} for x in ["a","b"]}
请注意,由于无法保证dict的顺序,您会得到如下结果:

{'a': {'data_len': [5, 4], 'data': [[1, 2, 3, 4, 5], [1, 2, 3, 4]]}, 'b': {'data_len': [3, 1], 'data': [[1, 2, 3], [1]]}}
你可以用

for k, v in sorted(detail_dict.items()):

对项目进行排序,使列表中的顺序具有确定性。

dict.fromkeys
方法对每个值使用相同的实例

summary_dict = dict.fromkeys(["a", "b"], {"data": [], "data_len": []})
修改一个键的字典将影响所有键。最好只使用不可变对象作为默认值,以避免此陷阱

试着用这句话来理解:

summary_dict = {k: {"data": [], "data_len": []} for k in 'ab')

非常感谢!我自己永远也不会想出那个陷阱。我想这是肯定的他们的方式,我称之为循环