我目前使用看似像这样的facebook api进入数据
[(9, 0), (10, 0), (11, 0), (12, 0)]
[(5, 2), (6, 2), (7, 0), (8, 2), (9, 0), (10, 0), (11, 3), (12, 1)]
[(1, 1), (2, 0), (3, 1), (4, 1), (5, 0), (6, 0), (7, 0), (8, 0), (9, 0), (10, 0), (11, 1), (12, 1)]
每行代表一个Facebook页面。元组中的第一个数字代表月份,而第二个数字代表该Facebook页面上的帖子数量。 正如您在第一行所看到的那样,1月到8月之间没有帖子,第二行也可以看到1月到4月之间没有帖子。我想为所有丢失的月份添加一个空值(0,0)。无论如何这样做?
答案 0 :(得分:1)
首先,您可以创建一个包含十二个(0, 0)
的默认列表
然后,由于简单的for
循环,将值替换为当前值。
values = [(0,0)] * 12
for value in row:
values[value[0] - 1] = value
答案 1 :(得分:1)
您可以使用列表理解和查找:
>>> l = [(9, 0), (10, 0), (11, 0), (12, 0)]
>>> lookup = dict(l)
>>> [(x, lookup[x]) if x in lookup else (0, 0) for x in range(1, 13)]
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0),
(9, 0), (10, 0), (11, 0), (12, 0)]
或者包括月份:
>>> l = [(5, 2), (6, 2), (7, 0), (8, 2), (9, 0), (10, 0), (11, 3), (12, 1)]
>>> lookup = dict(l)
>>> [(x, lookup[x]) if x in lookup else (x, 0) for x in range(1, 13)]
[(1, 0), (2, 0), (3, 0), (4, 0), (5, 2), (6, 2), (7, 0), (8, 2),
(9, 0), (10, 0), (11, 3), (12, 1)]
答案 2 :(得分:1)
我建议使用defaultdict
,这样就无需手动设置缺失值,但也可以查询非现有值:
from collections import defaultdict
dict = defaultdict(lambda: 0)
list = [(5, 2), (6, 2), (7, 0), (8, 2), (9, 0), (10, 0), (11, 3), (12, 1)]
for item in list:
dict[item[0]] = item[1]
现在缺少的月份会返回0
:
print(dict[4]) # ==> 0
当您访问它们时,只需按需创建缺失月份的条目。
如果您需要或希望保持列表,您可以使用以下列表理解:
list = [(i, 0) if list[0][0] != i else list.pop(0) for i in range(1,13)]
这将返回:
[(1, 0), (2, 0), (3, 0), (4, 0), (5, 2), (6, 2), (7, 0), (8, 2), (9, 0), (10, 0), (11, 3), (12, 1)]