python - 如何根据列表的长度将包含列表的字典分成相等的部分
问题描述
假设我有一个包含多个不同大小列表的字典,我将如何根据列表的长度将字典拆分为 4 个长度相等的字典。有没有一种简单的方法可以做到这一点?
dict = {"A":[1,2,3,4,5], "B":[1,2,3], "C":[1,2,3,4,5,6,7,8]}
我如何将其拆分为 4 个相同长度的字典,以便获得以下结果:
dict1 = {"A":[1,2,3,4]}
dict2 = {"A":[5], "B":[1,2,3]}
dict3 = {"C":[1,2,3,4]}
dict4 = {"C":[5,6,7,8]}
编辑:如果不能平均分割,那么其中一个字典最终会比其他字典稍长。
解决方案
这是一种方法,使用生成器生成连续的键值对:
data = {"A":[1,2,3,4,5], "B":[1,2,3], "C":[1,2,3,4,5,6,7,8]}
def key_value_gen(data):
# will yield ('A', 1), ('A', 2), .... ('C', 8)
for key, values in data.items():
for value in values:
yield key, value
out = []
size = 4
for index, (key, value) in enumerate(key_value_gen(data)):
# if the index is a multiple of size, we add a new dict
if index % size == 0:
out.append({})
out[-1].setdefault(key, []).append(value)
print(out)
# [{'A': [1, 2, 3, 4]}, {'A': [5], 'B': [1, 2, 3]}, {'C': [1, 2, 3, 4]}, {'C': [5, 6, 7, 8]}]
推荐阅读
- json - 在 postgres 函数中使用 now 或 current_timestamp
- corda - 在流测试中重新启动节点会引发错误
- javascript - 如何改进 Lighthouse 报告 (PWA) 的“消除渲染阻塞资源”?
- java - 如果有两个条件的语句不能正常工作
- ruby - 在 mac 上安装、运行 Fastlane for Flutter 时出错
- android - 安卓 AVD NFC
- javascript - 在使用 jquery 附加从数据库中获得的 5 个结果后,如何附加 div?
- wordpress - Wordpress:我可以在我的插件中使用 get_post_meta 吗?
- c# - 是否可以对 DLL 中的私有静态变量使用反射?
- android - FileAccessing 媒体文件和权限