检查字典中是否存在密钥。如果没有,请追加它

时间:2012-07-18 18:49:13

标签: python dictionary

我有一个从json数据创建的大型python dict,并且正在从大型dict创建一个较小的dict。大字典的一些元素有一个称为“细节”的键,而一些元素则没有。我想要做的是检查大字典中的每个条目中是否存在密钥,如果不存在,请将具有值“No details available”的密钥“details”附加到新字典中。我在下面放一些示例代码作为演示。我的代码中有很多键,LargeDict要大得多,但为了清晰起见,我保持简单。

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模块或者是否有更简单的方法?

3 个答案:

答案 0 :(得分:13)

您不需要collections.defaultdict。您可以使用字典对象的setdefault方法。

d = {}
bar = d.setdefault('foo','bar') #returns 'bar'
print bar # bar
print d  #{'foo': 'bar'}

正如其他人所说,如果您不想将密钥添加到字典中,可以使用get方法。

这是我经常看到的旧reference

答案 1 :(得分:4)

如果您想自动在collections.defaultdict创建条目,可以使用dict。但是,如果您不这样做,只想要“不可用”(或其他),那么您只需将dict指定为d[key] = v并使用d.get(k, 'Not available')作为默认值< / p>

答案 2 :(得分:2)

使用get(key, defaultVar)方法在缺少'details'密钥时提供默认值:

SmallDict = {d['name']:{'department':d['department'],'details':d.get('details','No details available')} for d in LargeDict['results']}