Python在一行中使用if语句

时间:2017-08-01 23:16:35

标签: python python-2.7 python-3.x

我想知道是否可以使用以下格式的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"},{...}]

1 个答案:

答案 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做一个传统的循环。理解中的任何异常都会抛出一切,无法捕捉和处理有问题的密钥。