我想知道是否可以使用以下格式的if / else,因此我可以避免在列表中循环两次以检查键:
test_dict = { d['name'] : d['type'] for d in object_list }
我想做的是:
test_dict = { d['name'] : d['type'] for d in object_list if 'name' in d and 'type' in d }
如果我不能存在自己的密钥错误,那将会很好。
=======================
修改。
这是我转换为字典的字典的json列表,因为列表中的每个字典应该只有两个值。但我想检查这两个值是否存在,即所以名称不是错误地称为nane
[ { "name":"test","type":"test"},{ "name":"test2","type":"test2"},{...}]
答案 0 :(得分:1)
以下适用于Python 2.7和Python 3.6:
test_dict = { d.get('name') : d.get('type') for d in object_list if d.get('name') is not None and d.get('type') is not None }
在翻译中:
>>> object_list = [ { "name":"test","type":"test"},{ "name":"test2","type":"test2"}, {'test':'bust', 'type':'busty'},{'name': 'test3', 'loser':'soloser'}]
>>> test_dict = { d.get('name') : d.get('type') for d in object_list if d.get('name') is not None and d.get('type') is not None}
>>> test_dict
{'test': 'test', 'test2': 'test2'}
>>>
如果你想要KeyError,你需要抛弃理解,然后在每次迭代中用try-except做一个传统的循环。理解中的任何异常都会抛出一切,无法捕捉和处理有问题的密钥。