0

我有一个这样的列表:

[(u'a', 0, 25), (u'a', 1, 11), (u'a', 3, 60), (u'a', 4, 89), (u'b', 0, 18), 
(u'b', 1, 76), (u'b', 2, 52), (u'b', 3, 75), (u'b', 4, 46)]

我想从 a 和 b 中取第 0 个元素,将它们相乘,然后将其添加到 sum 变量中。如果 a 或 b 中缺少一项(在本例中为 a[2]),则将其表示为 0。

我的做法:

  1. 取两个空列表 a_list 和 b_list。
  2. 遍历大列表并根据第一项(“a”或“b”)将项目放入相应的列表中。
  3. 从两个列表中选择基于相同索引的每个项目,将它们相乘并将其放入 sum 变量中。
  4. 继续到列表的末尾。

但问题是我不能将 0 分配给不存在的索引(如 a[2])。任何解决方案或更简单的方法可以做到这一点?

4

1 回答 1

1
data = [(u'a', 0, 25), (u'a', 1, 11), (u'a', 3, 60), (u'a', 4, 89), (u'b', 0, 18),
(u'b', 1, 76), (u'b', 2, 52), (u'b', 3, 75), (u'b', 4, 46)]

d = {'a': {}, 'b': {}}
for x, y, z in data:
    d[x][y] = z    

>>> sum(d['a'].get(k, 0) * d['b'].get(k, 0)
        for k in d['a'].viewkeys() | d['b'].viewkeys())
9880
于 2013-05-22T06:17:40.813 回答