我有一个从json数据创建的大型python dict,并且正在从大型dict创建一个较小的dict。大字典的某些元素有一个名为“details”的键,而有些元素没有。我要做的是检查该键是否存在于大字典的每个条目中,如果不存在,则将值为“No details available”的键“details”附加到新字典中。我在下面放了一些示例代码作为演示。较大的dict要大得多,我的代码中有许多键,但为了清晰起见,我将它保持简单。
LargeDict = {'results':
[{'name':'john','age':'23','datestart':'12/07/08','department':'Finance','details':'Good Employee'},
{'name':'barry','age':'26','datestart':'25/08/10','department':'HR','details':'Also does payroll'},
{'name':'sarah','age':'32','datestart':'13/05/05','department':'Sales','details':'Due for promotion'},
{'name':'lisa','age':'21','datestart':'02/05/12','department':'Finance'}]}
这就是我获取SmallDict数据的方式:
SmallDict = {d['name']:{'department':d['department'],'details':d['details']} for d in LargeDict['results']}
但是,当其中一个大型dict条目没有详细信息时,我会得到一个关键错误。我说我需要使用DefaultDict
模块是对的,还是有更简单的方法?
你不需要
collections.defaultdict
。您可以使用字典对象的setdefault
方法。正如其他人所指出的,如果您不想将密钥添加到字典中,可以使用
get
方法。这是我经常看到的一个旧的reference。
当缺少
'details'
键时,使用get(key, defaultVar)
方法提供默认值:如果要在
dict
中自动创建条目,可以使用collections.defaultdict
。但是,如果您不想,只想“不可用”(或其他),那么您可以将dict
指定为d[key] = v
,并使用d.get(k, 'Not available')
作为默认值相关问题 更多 >
编程相关推荐