Как условно заменить ключ, используя понимание dict

#python #dictionary-comprehension

#python #словарь-понимание

Вопрос:

У меня есть словарь

 d={'user': 'bala', 'password': 'pass', 'filetype': 'as-parquetfile'}
 

все ключи должны иметь префикс, за -- исключением filetype того, который следует заменить на -- , чтобы получить

 {'--user': 'bala', '--password': 'pass', '--': 'as-parquetfile'}
 

Если я сделаю следующее, я получу синтаксическую ошибку.

 {'--' k:v if k!='filetype' else '--':v for (k,v) in d.items()}
 

Ответ №1:

key: value Часть понимания dict не является выражением, поэтому вы не можете использовать троичный оператор с ним напрямую. Что вы можете сделать, так это:

 {('--' k if k!='filetype' else '--'): v for (k,v) in d.items()}
 

Комментарии:

1. @pault Вы бы так подумали, но посмотрите на требование в вопросе.

Ответ №2:

Грязный способ, который мне нравится использовать:

 d = {'user': 'bala', 'password': 'pass', 'filetype': 'as-parquetfile'}
d = {"--"   (k, "")[k=="filetype"]: v for k, v in d.items()}
d
>>> {'--': 'as-parquetfile', '--password': 'pass', '--user': 'bala'}
 

Комментарии:

1. использование True и False в качестве значений индекса для кортежа является разумным, однако оно менее читабельно