Python-Addings空值

Python-Addings空值,python,facebook,list,null,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 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,0)

然后,通过一个简单的
for
循环,将值替换为当前值

values = [(0,0)] * 12
for value in row:
    values[value[0] - 1] = value

您可以使用列表理解和查找:

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

我建议使用
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)]

事实上,在我看来,在第一个案例中根本没有帖子。你为什么要这样做?如果没有要求,比如将所有这些数据传递给一些外部代码,那么最好不要进行这种填充(因为信息已经完成)。您真的想要(0,0)还是(月,0)?如果为(0,0),则顺序很重要。dict/DEFAULT dict解决方案可能存在问题。