将这个Python结构的值合并为单个字典的更快捷方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将这个Python结构的值合并为单个字典的更快捷方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1459字,纯文字阅读大概需要3分钟。
内容图文
我已经重构了如何创建下面的merged-dictionary(all_classes),但我想知道它是否可以更高效.
我有一本字典词典,像这样:
groups_and_classes = {'group_1': {'class_A': [1, 2, 3],
'class_B': [1, 3, 5, 7],
'class_c': [1, 2], # ...many more items like this
},
'group_2': {'class_A': [11, 12, 13],
'class_C': [5, 6, 7, 8, 9]
}, # ...and many more items like this
}
函数从groups_and_classes中创建一个新对象(经常调用创建它的函数):
all_classes = {'class_A': [1, 2, 3, 11, 12, 13],
'class_B': [1, 3, 5, 7, 9],
'class_C': [1, 2, 5, 6, 7, 8, 9]
}
现在,有一个循环可以做到这一点:
all_classes = {}
for group in groups_and_classes.values():
for c, vals in group.iteritems():
for v in vals:
if all_classes.has_key(c):
if v not in all_classes[c]:
all_classes[c].append(v)
else:
all_classes[c] = [v]
到目前为止,我更改了代码以使用集合而不是列表,因为列表的顺序无关紧要,并且值必须是唯一的:
all_classes = {}
for group in groups_and_classes.values():
for c, vals in group.iteritems():
try:
all_classes[c].update(set(vals))
except KeyError:
all_classes[c] = set(vals)
这有点好,我没有必要将集转换为列表,因为代码中使用了all_classes.
问题:是否有更有效的方法来创建all_classes(除了在构建groups_and_classes的同时构建它,并且在调用此函数的任何地方进行更改)?
解决方法:
这是一个简洁的调整,虽然我不确定性能:
from collections import defaultdict
all_classes = defaultdict(set)
for group in groups_and_classes.values():
for c, vals in group.iteritems():
all_classes[c].update(set(vals))
自切片面包以来,默认食品并不是最好的,但它们非常酷.
内容总结
以上是互联网集市为您收集整理的将这个Python结构的值合并为单个字典的更快捷方法是什么?全部内容,希望文章能够帮你解决将这个Python结构的值合并为单个字典的更快捷方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。