【发布时间】:2014-02-08 04:05:58
【问题描述】:
我正在尝试反转字典。在许多键具有相同值的情况下,新键(旧值)应该与一组新值(旧键)相关联。我解决了这个问题,但我正在尝试使用字典理解和一些辅助方法进行重构。
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()} )
但是,这会引发语法错误
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
希望该代码中的对齐方式正确。它应该指向else 子句中的第二个:。知道这里有什么吗?我已经尝试了尽可能多的括号形式。
【问题讨论】:
-
请注意,让一些值(有效)为标量而另一些为值集有点尴尬。为独特的情况设置一组值会更自然。
-
@DSM 是的,这是一个练习,并没有真正用于任何类型的生产代码。只是一个有趣的脑筋急转弯(对我来说)
标签: python dictionary list-comprehension dictionary-comprehension