Python - 添加空值

时间:2016-01-09 14:51:17

标签: python facebook list null

我目前使用看似像这样的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)。无论如何这样做?

3 个答案:

答案 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)]