首页 > 解决方案 > 如何从 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 中实现这一点?

标签: pythonpython-3.xnumpynumpy-ndarray

解决方案


使用带有条件的 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)}

当且仅当元组中的所有数字都非零时,上面的示例才会将条目添加到新字典中。如果要在任何数字非零时添加条目,请更改allany

如果您想要 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

推荐阅读