字典声明中的海象操作符



我想在字典声明中使用海象操作符。然而,:可能会引起问题。我有一个嵌套在列表推导式中的字典声明,但我不想将其分解为一个简单的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
]

相关内容

  • 没有找到相关文章

最新更新