2

我正在尝试将字典理解和内联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循环轻松完成该任务,但我只想将这两个元素结合起来。

4

2 回答 2

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'}
于 2014-02-12T12:55:21.640 回答
1

扩展另一个答案,您可以使其更具可读性,如下所示

get_key = lambda k: ('job[%s]' if k != 'id' else '%s') % k
args = { get_key(key): val for key, val in job.iteritems()}
于 2014-02-12T13:19:00.343 回答