包含一行代码的python字典定义-如何添加更多代码

时间:2019-03-21 14:28:29

标签: python

在python中,有没有办法在这一行代码中打印出ij

sources = {i: self.path_cost(i, target) for i, j in set}

3 个答案:

答案 0 :(得分:4)

不是目前所写的。 (编辑:请参阅AKX的答案, 是可能的。)您必须将dict理解重写为循环。请注意,set是内置名称,因此不是变量的理想选择。选择一个更好的名字!另外,ij非常通用,将它们重命名为更清晰的名称可能很有用。

sources = {}
for i, j in set:
    print(i, j)
    sources[i] = self.path_cost(i, target)

答案 1 :(得分:3)

好吧,但这很丑,您真的不想这样做。

想法是print()函数具有在返回None时打印内容的副作用。

由于必须评估元组的所有元素,因此我们仅出于副作用将其打包到元组中,然后在元组的第二个元素中进行实际工作,最后仅抓取第二个元素。

sources = {i: (print(i, j), self.path_cost(i, target))[1] for i, j in set}

但是请再次注意,除了临时调试以外,请勿执行其他任何操作。

答案 2 :(得分:1)

这也可能是解决方案:

def print_ij_and_return_i(i, j):
    print(i, j)
    return i

sources = {i: self.path_cost(print_ij_and_return_i(i, j), target) 
           for i, j in set}