python - 如何从 Python 中的大字典中创建子字典?
问题描述
我有一个如下的 Python 字典。您可以在其中看到一些values
对于给定的全为零key
。只要包含非零值,我就想从主字典中创建子字典。
74: (0, 0, 0, 0, 0),
75: (0, 0, 0, 0, 0),
76: (0, 0, 0, 0, 0),
77: (69, 76, 151, 157, 42),
78: (68, 78, 150, 160, 100),
79: (69, 77, 151, 159, 64),
80: (69, 77, 151, 159, 64),
81: (71, 74, 154, 158, 12),
82: (0, 0, 0, 0, 0),
83: (0, 0, 0, 0, 0),
84: (0, 0, 0, 0, 0),
85: (0, 0, 0, 0, 0),
86: (0, 0, 0, 0, 0),
87: (0, 0, 0, 0, 0),
88: (0, 0, 0, 0, 0),
89: (0, 0, 0, 0, 0),
90: (0, 0, 0, 0, 0),
91: (0, 0, 0, 0, 0),
92: (0, 0, 0, 0, 0),
93: (0, 0, 0, 0, 0),
94: (0, 0, 0, 0, 0),
95: (64, 68, 150, 153, 12),
96: (63, 79, 148, 159, 176),
97: (64, 79, 148, 159, 165),
98: (63, 81, 146, 175, 522),
99: (63, 82, 145, 179, 646),
例如,在上述情况下,我应该能够创建两个子词典(来自 77-81 和 95-99)。如何在 Python 中实现这一点?
解决方案
使用带有条件的 dict 理解:
output = {key: value for key, value in orig_dict.items() if all(value)}
如果你想更明确:
output = {key: value for key, value in orig_dict.items() if all(n != 0 for n in value)}
在这两种情况下,output
是
{77: (69, 76, 151, 157, 42),
78: (68, 78, 150, 160, 100),
79: (69, 77, 151, 159, 64),
80: (69, 77, 151, 159, 64),
81: (71, 74, 154, 158, 12),
95: (64, 68, 150, 153, 12),
96: (63, 79, 148, 159, 176),
97: (64, 79, 148, 159, 165),
98: (63, 81, 146, 175, 522),
99: (63, 82, 145, 179, 646)}
当且仅当元组中的所有数字都非零时,上面的示例才会将条目添加到新字典中。如果要在任何数字非零时添加条目,请更改all
为any
。
如果您想要 2 个(或更多)字典,请使用带有额外条件的循环:
a = {}
b = {}
for key, value in orig_dict.items():
if all(value):
if key in range(77, 82):
a[key] = value
elif key in range(95, 100):
b[key] = value
推荐阅读
- c++ - 柯南错误:在“需求”的不同评估中获得不兼容的需求
- typescript - 在定义类型时检查列表类型属性中的每个元素
- python - How to apply condition in PySpark to keep null only if one else remove nulls
- node.js - 将标头提供给 API 时的 Access-Control-Allow-Origin
- idris - 以数据类型编码二叉搜索树
- python - 为什么 Python 只能读取“下载”文件夹中的 CSV 而不能读取我 PC 上的其他文件夹中的 CSV?
- recursion - 递归是解决树问题的唯一方法吗
- ios - 故事板中的条形按钮未显示
- makefile - 如何将不同目录中的源代码编译成一个目录(Makefile)中的目标文件?
- amazon-web-services - 为 lambda 标记无服务器日志组