Expressão ternária na compreensão de dicionários
Estou tentando inverter um dicionário. No caso de muitas chaves com o mesmo valor, a nova chave (valor antigo) deve ser associada a um conjunto de novos valores (chaves antigas). Resolvi o problema, mas estou tentando refatorar usando compreensão de dicionário e alguns métodos auxiliares.
def has_unique_value(k):
return d.values().count(d[k]) == 1
def keys_with_same_value_as_key(k):
return set([key for key in d.keys() if d[key] == d[k]])
print( {d[k]:k if has_unique_value(k) else d[k]:keys_with_same_value_as_key(k) for k in d.keys()} )
No entanto, isso gera um erro de sintaxe
print( {d[k]:k if has_unique_value(k) else d[k]:keys_with_same_value_as_key(k) for k in d} )
^
SyntaxError: invalid syntax
Espero que o alinhamento nesse código funcione corretamente. Deve apontar para o segundo:
, noelse
cláusula. Alguma idéia do que há aqui em cima? Eu tentei tantas formas de parênteses quanto posso conceber.