我正在尝试将词典理解和内联if
语句结合起来。
只要项目没有键id
,理解就会遍历所有项目
它会创建一个新密钥:job[old_key]
。
代码
job = {'id':1234, 'age':17, 'name':'dev'}
args = {'job[%s]' % k:v if k != 'id' else k:v for k, v in job}
希望输出
print args
{'id':1234, 'job[age]':17, 'job[name]':'dev'}
提出了SyntaxError
。
args = {'job[%s]' % k:v if k != 'key' else k:v for k, v in job}
^
SyntaxError: invalid syntax
然而,当我尝试运行我的脚本时,Python会抱怨k:v
。
如何组合字典理解和内联if语句?
注意:我知道我可以使用for
循环轻松完成该任务,但我只是想要
结合这两个元素。
答案 0 :(得分:4)
键和值部分是单独的表达式。仅在关键部分使用条件表达式:
args = {'job[%s]' % k if k != 'id' else k: v for k, v in job.iteritems()}
:
不是任何一个表达式的一部分,只是字典理解语法的一部分。您还需要遍历键和值;在Python 2中,使用job.iteritems()
,Python 3,job.items()
。
演示:
>>> job = {'id':1234, 'age':17, 'name':'dev'}
>>> {'job[%s]' % k if k != 'id' else k: v for k, v in job.iteritems()}
{'id': 1234, 'job[age]': 17, 'job[name]': 'dev'}
答案 1 :(得分:1)
扩展other answer,您可以使其更具可读性,如下所示
get_key = lambda k: ('job[%s]' if k != 'id' else '%s') % k
args = { get_key(key): val for key, val in job.iteritems()}