我想在字典声明中使用海象操作符。然而,:
可能会引起问题。我有一个嵌套在列表推导式中的字典声明,但我不想将其分解为一个简单的for循环(这将是一个懒惰的答案)。这可能吗?
rows = [
{
'words': sorted(row_words, key=lambda x: x['x0']),
'top': top := min(map(lambda x: x['top'], row_words)),
'doctop': top + doctop_adj,
} for row_words in doctop_clusters
]
在一些简单的场景中也很有用。
foo = {
'a': a := some_calculation(),
'b': a * 8
}
注意:字典推导中的海象运算符不能回答我的问题,因为我没有一个可以使用海象运算符的条件。而下面的方法是非常不干净的。
rows = [
{
'words': sorted(row_words, key=lambda x: x['x0']),
'top': top,
'doctop': top + doctop_adj,
} for row_words in doctop_clusters
if top := min(map(lambda x: x['top'], row_words)) or True
]
正如@Sayse在评论中指出的那样,诀窍是将其包装在括号()
中。
所以一般情况下的解决方案很简单:
foo = {
'a': (a := some_calculation()),
'b': a * 8
}
在这种情况下,您可以如何使用海象操作符:
rows = [
{
'words': sorted(row_words, key=lambda x: x['x0']),
'top': (top := min(map(lambda x: x['top'], row_words))),
'doctop': top + doctop_adj,
} for row_words in doctop_clusters
]