【问题标题】:How to make a dictionary comprehension with inline if?如何使用 inline if 进行字典理解?
【发布时间】:2014-03-10 19:34:49
【问题描述】:

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

【问题讨论】:

    标签: python dictionary dictionary-comprehension


    【解决方案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()}
    

    【讨论】:

      【解决方案2】:

      键和值部分是独立的表达式。仅在关键部分使用条件表达式:

      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'}
      

      【讨论】:

        猜你喜欢
        • 2012-03-15
        • 1970-01-01
        • 2021-06-02
        • 2018-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 1970-01-01
        相关资源
        最近更新 更多