2014-02-12 1 views
1

Я пытаюсь совместить понимание словаря и встроенный оператор if. Понимание проходит по всем элементам, и пока элемент не имеет ключа id , он создает новый ключ: job[old_key].Как сделать понимание словаря inline if?

Код

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. Как я могу объединить понимание словаря и оператор inline if?

Примечание: Я знаю, что я могу легко достичь этой задачи с for цикла, но я просто хочу объединить эти два элемента.

ответ

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

Расширение 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()} 

 Смежные вопросы

  • Нет связанных вопросов^_^