我有一个从json数据创建的大型python 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'}]}
Run Code Online (Sandbox Code Playgroud)
这就是我获取SmallDict数据的方式:
SmallDict = {d['name']:{'department':d['department'],'details':d['details']} for d in LargeDict['results']}
Run Code Online (Sandbox Code Playgroud)
我得到一个关键错误,但是当一个大的dict条目没有细节时.我说得对,我需要使用DefaultDict模块,还是有更简单的方法?
mgi*_*son 13
你不需要collections.defaultdict.您可以使用setdefault字典对象的方法.
d = {}
bar = d.setdefault('foo','bar') #returns 'bar'
print bar # bar
print d #{'foo': 'bar'}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,如果您不想将密钥添加到字典中,则可以使用该get方法.
这是我经常看到的旧参考.
当密钥丢失时,使用该get(key, defaultVar)方法提供默认值:'details'
SmallDict = {d['name']:{'department':d['department'],'details':d.get('details','No details available')} for d in LargeDict['results']}
Run Code Online (Sandbox Code Playgroud)