假设你理解第 1-6 行……</p>
第 7 行:
sums[ix]=sums.get(ix, 0)+num
sums.get(ix, 0)
与 相同sums[ix]
,只是如果ix not in sums
它返回0
。所以,这就像sums[ix] += num
,除了它首先将值设置为0
if 这是你第一次看到ix
。
因此,应该清楚的是,在这个循环结束时,sums[ix]
将得到 column 中所有值的总和ix
。
这是一种愚蠢的做法。正如 mgilson 指出的那样,您可以直接使用defaultdict
,这样就不需要额外的逻辑。或者,更简单地说,您可以只使用 alist
而不是 a dict
,因为这(按连续的小数字索引)正是list
s 的用途......</p>
第 8 行:
for key in sorted(sums):
首先,您可以迭代任何对象dict
,就好像它是 alist
或其他可迭代对象一样,它与迭代 具有相同的效果sums.keys()
。因此,如果sums
看起来像{ 0: 4, 1: 6, 2: 3 }
,您将迭代0, 1, 2
.
除了dict
s 没有任何固有的顺序。您可能会得到0, 1, 2
,或者您可能会得到1, 0, 2
,或任何其他命令。
因此,sorted(sums)
只需按排序顺序返回键的副本list
,保证您将按0, 1, 2
该顺序获得。
再一次,这很愚蠢,因为如果你一开始就使用 a list
,你就会把事情整理好。
第 9 行:
print(key, '=', sums[key])
这应该是显而易见的。如果key
迭代0, 1, 2
, 那么这将打印0 = 4
, 1 = 6
, 2 = 3
.
因此,换句话说,它打印出每个列号,以及该列中所有值的总和。