python - 根据键值拆分嵌套字典
问题描述
谁能给我一个提示,告诉我如何根据一个名为的公共键名score
和 的值将嵌套字典拆分为单独的嵌套字典score
?
例如分解这个嵌套字典nested_group_map_original
:
nested_group_map_original = {
'group_l1n': {'score': 0.12949562072753906, 'VMA-1-1': '14', 'VMA-1-2': '13', 'VMA-1-3': '15', 'VMA-1-4': '11', 'VMA-1-5': '9', 'VMA-1-7': '7', 'VMA-1-10': '21', 'VMA-1-11': '16'},
'group_l1s': {'score': -0.40303707122802734, 'VMA-1-6': '8', 'VMA-1-8': '6', 'VMA-1-9': '10', 'VMA-1-12': '19', 'VMA-1-13': '20', 'VMA-1-14': '37', 'VMA-1-15': '38', 'VMA-1-16': '39'},
'group_l2n': {'score': 0.6091512680053768, 'VAV-2-1': '12032', 'VAV-2-2': '12033', 'VMA-2-3': '31', 'VMA-2-4': '29', 'VAV-2-5': '12028', 'VMA-2-6': '27', 'VMA-2-7': '30', 'VMA-2-12': '26'},
'group_l2s': {'score': 0.11078681945799929, 'VMA-2-8': '34', 'VAV-2-9': '12035', 'VMA-2-10': '36', 'VMA-2-11': '25', 'VMA-2-13': '23', 'VMA-2-14': '24'}
}
使它看起来像下面这样,但以编程方式用于两个名为nested_group_map_copy_lows
and的单独嵌套字典nested_group_map_copy_high
:
nested_group_map_copy_lows = {
'group_l1s': {'score': -0.40303707122802734, 'VMA-1-6': '8', 'VMA-1-8': '6', 'VMA-1-9': '10', 'VMA-1-12': '19', 'VMA-1-13': '20', 'VMA-1-14': '37', 'VMA-1-15': '38', 'VMA-1-16': '39'},
'group_l2s': {'score': 0.11078681945799929, 'VMA-2-8': '34', 'VAV-2-9': '12035', 'VMA-2-10': '36', 'VMA-2-11': '25', 'VMA-2-13': '23', 'VMA-2-14': '24'}
}
nested_group_map_copy_highs = {
'group_l2n': {'score': 0.6091512680053768, 'VAV-2-1': '12032', 'VAV-2-2': '12033', 'VMA-2-3': '31', 'VMA-2-4': '29', 'VAV-2-5': '12028', 'VMA-2-6': '27', 'VMA-2-7': '30', 'VMA-2-12': '26'},
'group_l1n': {'score': 0.12949562072753906, 'VMA-1-1': '14', 'VMA-1-2': '13', 'VMA-1-3': '15', 'VMA-1-4': '11', 'VMA-1-5': '9', 'VMA-1-7': '7', 'VMA-1-10': '21', 'VMA-1-11': '16'},
}
不太确定如何解决这个问题,我想我需要用它enumerate
来创建全新的字典,但如果我尝试在单独的列表中找到最高分scores_
scores_ = []
for i in nested_group_map_original:
scores_.append(nested_group_map_original[i]["score"])
scores_sorted = sorted(scores_, key = float)
然后切片最高和最低值:
scores_sorted_highs = scores_sorted[2:]
scores_sorted_lows = scores_sorted[:2]
我被困在这里,我不认为这del
是要走的路,非常感谢任何提示......我知道在我的代码中我什至没有定义我认为我可以用 Python 做的新字典,enumerate
但不知道如何实现它
for i in nested_group_map_original:
if nested_group_map_original[i]["score"] in scores_sorted_highs:
del nested_group_map_original[i]
这会出错:
RuntimeError: dictionary changed size during iteration
解决方案
您可以根据其对应的分数对原始字典的键进行排序,如下所示:
sorted_keys = sorted(nested_group_map_original, key = lambda x: nested_group_map_original[x]['score'])
然后,您可以根据每个字典中所需的值数量将其拆分为两个不同的字典。就像在您的两个示例中一样,您可以执行以下操作:
scores_sorted_lows = {k:nested_group_map_original[k] for k in sorted_keys[:2]}
scores_sorted_highs = {k:nested_group_map_original[k] for k in sorted_keys[2:]}
推荐阅读
- c++ - p_threads初始化中向量和数组的区别
- javascript - 如何在 CountUp JS 包中添加逗号
- javascript - 未捕获的 FirebaseError:Firebase:名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)
- python - Pandas 按列分组并计算值
- c# - 如何检查 PDF 是否正确加载?
- python - 无法使用 pandas 读取 cab 文件
- typescript - 如何在对象打字稿代码中找到元素
- windows - C ++ Windows从任务管理器中的应用程序选项卡中检测到杀戮?
- c# - 无法从“ListMapColor.MyContainer”转换为“System.Drawing.Color”
- active-directory - 如何映射 Sitecore Active Directory SSO 的管理员声明?