python 列表合并

Select
  • 42

有三个列表,里面的元素长度不等,但是每个子列表是有规律的,包含两个元素,日期和一个数字
如下:
lista = [['2017-07-01', 11], ['2017-07-02', 12], ['2017-07-03', 13]]
listb= [['2017-07-02', 22], ['2017-07-03', 23]]
listc= [['2017-07-01', 34], ['2017-07-02', 35], ['2017-07-03', 36], ['2017-07-07',37]]

现在要实现合并
日期取并集,正续排列,不重复
后面的元素第二列为lista子列表的第二列,要对应,若没有补0
第三列为listb子列表的第二列,要对应,若没有补0
第四列为listc子列表的第二列,要对应,若没有补0
第五列为第二三四列求和
list_result = [

   ['2017-07-01', 11, 0, 34, 45],
   ['2017-07-02', 12, 22, 35, 69],
   ['2017-07-03', 13, 23, 36, 72],
   ['2017-07-07', 0, 0, 37, 37],

]
list_result的长度为日期列并集的长度,求大神帮忙解一下,十分感谢

回复
阅读 2.2k
1 个回答
lista = [['2017-07-01', 11], ['2017-07-02', 12], ['2017-07-03', 13]]
listb= [['2017-07-02', 22], ['2017-07-03', 23]]
listc= [['2017-07-01', 34], ['2017-07-02', 35], ['2017-07-03', 36], ['2017-07-07',37]]

tmp = sorted({ls[0]for ls in lista+listb+listc})
date = {dt:i for i,dt in enumerate(tmp)}
list_result = [[date]+[0]*4 for date in tmp]

for col,ls in enumerate((lista,listb,listc),1):
    for val in ls:
        row = date[val[0]]
        list_result[row][col] = val[1]
                
for ls in list_result:
    ls[-1] = sum(ls[1:5])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏