擅长:python、mysql、java
<p>如果您真的想对数据结构执行此操作,可以执行以下操作:</p>
<pre><code>from collections import defaultdict
for k, lst in d.iteritems():
counts = defaultdict(int)
for i in range(0, len(lst), 3):
counts[lst[i]] += lst[i + 2]
print k, ", ".join(["%s %d" % (n, c) for n, c in counts.items()])
</code></pre>
<p>然而,更好的办法是将数据存储在合理的数据结构中。在列表中存储信息的规则类似于“每个列表以三个一组的形式出现,每三个列表中的第一个是名称等”,这使得处理数据变得笨拙和违反直觉。相反,如果您将数据存储为:</p>
<pre><code>d = {'a': {'Adam': {'Book': 4}},
'b': {'Bill': {'TV': 6, 'Computer': 5}, 'Jill': {'Sports': 1}},
'c': {'Bill': {'Sports': 3}},
'd': {'Quin': {'Computer': 3}, 'Adam': {'TV': 3}},
'e': {'Quin': {'TV': 2, 'Book': 5}},
'f': {'Adam': {'Computer': 7}}}
</code></pre>
<p>然后,你可以这样回答问题:</p>
<pre><code>for k, v in d.items():
print k, ", ".join(["%s %d" % (n, sum(a.values())) for n, a in v.items()])
</code></pre>
<p>这也有许多其他好处:你可以通过做<code>d["a"]["Adam"]["Book"]</code>(或者,如果你不确定“亚当”或“书”在那里,<code>d["a"].get("Adam", {}).get("Book", 0)</code>)来找出亚当在“a”中读了多少遍书。根据这一清单进行的其他计算也是可能和有用的。你知道吗</p>