【问题标题】:Python - Addings nullsPython - 添加空值
【发布时间】:2016-01-09 14:51:16
【问题描述】:

我目前有数据使用 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) 还是 (month,0)?如果 (0,0) 则顺序很重要,dict/defaultdict 解决方案可能有问题。

标签: python facebook list null


【解决方案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】:

    首先,您可以创建一个包含十二个(0, 0) 的默认列表。
    然后,通过一个简单的for 循环将这些值替换为当前值。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2022-08-18
        • 1970-01-01
        • 2022-11-21
        • 2022-11-15
        • 2013-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多