Я считаю, что вы можете пропустить часть о построении словаря из ключей:
l = [k[0] for k in d]
В вашем примере создание словаря из ключей в основном делает то же самое, но с дополнительной работой по созданию промежуточный словарь, использующий «значения» -частей ключей (например, '#ffe'
).
Есть два функциональных различия, о которых я могу думать:
Ваш конструкция словаря будет неявно проверять ключи d
: Например, если d
содержит ключ из трех частей
('c4', 4, 5): ('f4', 'args')
Тогда ваш dict
конструкция вызовет исключение; в то время как более короткая итерация k[0]...
будет просто использовать c4
без каких-либо ошибок.
Если d
содержит дубликаты в первой части ключа, например, дополнительный c1
('c1', '#abc'): (...
Тогда ваш Конструкция dict
вернет только один c1
в результирующем списке, тогда как итерация ключа даст c1
дважды в результирующем списке. В зависимости от желаемого, это можно использовать как проверку работоспособности; или вы можете использовать
l = {k[0] for k in d}
, чтобы получить набор вместо списка.
Что касается более организованного словаря, это зависит от того, что вы хотите с ним делать. Структурированные ключи, особенно разных форм, как в вашем примере, несут в себе опасность того, что ваши «геттеры» могут запутаться. В таких случаях я бы явно моделировал части того, что вы помещаете в словарь (как ключи, так и значения), как классы (например, используя https://docs.python.org/3/library/dataclasses.html).