#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 в качестве значений индекса для кортежа является разумным, однако оно менее читабельно