我有一个字典,其中有5个键['total_rows', 'rows_failed', 'dup_rows_skipped', 'total_inserts', 'total_updates']
像下面这样说
{'CO_issuers': {'total_rows': 1, 'rows_failed': 0, 'dup_rows_skipped': 0, 'total_inserts': 0, 'total_updates': 1},
'DC_issuers': {'total_rows': 1, 'rows_failed': 1}}
每个键ex-CO_issuers
将具有5个键,如上所述。如果前一个密钥{-DC_issuers
没有密钥,则应将其密钥添加为0
。
我走了这么远,我在那儿遍历字典,并检查所有键是否存在
for key, value in mail_stats.items():
if all(key in mail_stats for key in("total_rows", "rows_failed", "dup_rows_skipped", "total_inserts", "total_updates")):
在浏览时,可以发现使用下面的代码,我们可以简单地做到这一点,但是无法适应我的情况。
if key not in d:
d[key] = value
如何做到这一点。
答案 0 :(得分:4)
defaultdict
是您最好的选择。
from collections import defaultdict
tallies = {"CO_issuers": defaultdict(int), "DC_issuers": defaultdict(int)}
不过,要清楚一点,这将与您预期的有所不同。特别是->默认dict实例不会具有所有键。但是,它们将允许您检索任何任意密钥。如果键不存在,它将获得传入的默认值的返回值。因此,tallies['DC_issuers']['not_present']
将返回0
。
要包含评论,您可以通过以下方式使其更加强大:
tallies = defaultdict(lambda: defaultdict(int))
在此版本中,每次您访问tallies
时,都会创建一个新的defaultdict创建整数。实际的计数是通过tallies[group][item] += 1
完成的,如果从未设置过,则检索任何值将返回0
,但对于存在的任何值都将返回正确的值。
答案 1 :(得分:0)
mail_stats = {'CO_issuers': {'total_rows': 1, 'rows_failed': 0, 'dup_rows_skipped': 0, 'total_inserts': 0, 'total_updates': 1},
'DC_issuers': {'total_rows': 1, 'rows_failed': 1}}
您可以遍历每个键,并检查是否不存在更新。
for key, value in mail_stats.items():
print(key, value)
if 'dup_rows_skipped' not in value:
value['dup_rows_skipped'] = 0
if 'total_inserts' not in value:
value['total_inserts'] = 0
if 'total_updates' not in value:
value['total_updates'] = 0
print('Updated dict', mail_stats)
更新字典-
Updated dict {'CO_issuers': {'total_rows': 1, 'rows_failed': 0, 'dup_rows_skipped': 0, 'total_inserts': 0, 'total_updates': 1},
'DC_issuers': {'total_rows': 1, 'rows_failed': 1, 'dup_rows_skipped': 0, 'total_inserts': 0, 'total_updates': 0}}