提问者:小点点

使用Python字典理解填充不同的字典


我希望压缩此语法以避免双重字典理解(我希望获得一些计算时间)

d1 = {loc:list(np.sum(data, 0)) for loc, data in dicos.items()}
d2 = {loc:np.nancumsum(list(np.sum(data, 0))) for loc, data in dicos.items()}

我试过了,但没有成功

d1,d2 = [{loc:list(np.sum(data, 0)),loc:np.nancumsum(list(np.sum(data, 0)))} \
         for loc, data in dicos.items()]

共1个答案

匿名用户

我不理解我们的社区最近痴迷于试图把越来越多的功能塞进一个单一的理解中。结果不仅通常不会比使用可见循环更有效,而且当作为一个单一的、复杂的理解来完成时,代码的可读性肯定会低得多。我认为人们不理解的是循环仍然以几乎相同的形式存在...只是如果你使用理解,它会隐藏在Python库代码中。

这里有一个清晰易读的方法来做你想做的事情,你只需要对你的数据进行一次单一的传递,你构建了两个字典,你所做的事情非常清楚:

d1 = {}
d2 = {}
for loc, data in dicos.items():
    d1[loc] = list(np.sum(data, 0))
    d2[loc] = np.nancumsum(list(np.sum(data, 0)))