开发者社区> 问答> 正文

将元素按时间顺序分组到按日期顺序嵌套的列表中?

我有一个嵌套的列表,有这种类型的结构:

mylist = [

[
    ['Bob', 'Male', '2019-12-10 9:00'], 
    ['Sally', 'Female', '2019-12-10 15:00']
], 

[
    ['Jake', 'Male', '2019-12-12 9:00'], 
    ['Ally', 'Female', '2019-12-12 9:30'], 
    ['Jamal', 'Male', '2019-12-12 15:00']
], 

[
    ['Andy', 'Male', '2019-12-13 15:00'],
    ['Katie', 'Female', '2019-12-13 15:30']
]

]

目前,这个主列表mylist是按日期组织的。所有包含同一天(即2019-12-12、2019-12-13…)的元素都嵌套在一起。 我想更进一步地进行嵌套,并在按日期排序的嵌套组中创建另一个嵌套组。这次,我想按时间安排。我想把所有在9点有标签的人和在15点有标签的人放在一起。 所以,我试图得到这个输出:

newlist = [

[
  [
    ['Bob', 'Male', '2019-12-10 9:00']
  ], 
  [
    ['Sally', 'Female', '2019-12-10 15:00']
  ]
], 


[
  [
    ['Jake', 'Male', '2019-12-12 9:00'], 
    ['Ally', 'Female', '2019-12-12 9:30'], 
  ],
  [
    ['Jamal', 'Male', '2019-12-12 15:00']
  ]
], 


[
  [
    ['Andy', 'Male', '2019-12-13 15:00'],
    ['Katie', 'Female', '2019-12-13 15:30']
  ]
]


]

基于这个问题的公认答案,我修改并尝试使用以下代码,但是没有成功。

newdict = defaultdict(list)

for data in mylist:
    for datum in data:
        _, _, time = datum
        _, date_time = time.split(" ")
        _, hour_minute = date_time.split(":")
        newdict[hour_minute].append(datum)

newlist = list(newdict.values())
print(newlist)

--------------------------------------------------------------------------------------------------------
Output:

[
  [
     ['Bob', 'Male', '2019-12-10 9:00'], 
     ['Sally', 'Female', '2019-12-10 15:00'], 
     ['Jake', 'Male', '2019-12-12 9:00'], 
     ['Ally', 'Female', '2019-12-12 9:30'], 
     ['Jamal', 'Male', '2019-12-12 15:00'], 
     ['Andy', 'Male', '2019-12-13 15:00'],
     ['Katie', 'Female', '2019-12-13 15:30']
  ]
]

我也做了很多网上搜索,但没有找到任何解决方案。有谁知道如何做到这一点吗?另外,请记住我对编程是新手,所以请尽量保持答案/解释尽可能简单。谢谢! 问题来源StackOverflow 地址:/questions/59381053/grouping-elements-time-wise-in-a-date-wise-nested-list

展开
收起
kun坤 2019-12-28 13:56:58 373 0
1 条回答
写回答
取消 提交回答
  • 如果它们已经排好序,我们可以使用groupby和一个函数来分隔时间来对它们进行分组:

    from itertools import groupby
    
    
    def f(l):
        return l[2].split(" ")[1].split(":")[0]
    
    newlist = [[list(g) for _, g in groupby(subl, f)] for subl in mylist]
    

    结果

    [
      [
        [
          ['Bob', 'Male', '2019-12-10 9:00']
        ],
        [ 
          ['Sally', 'Female', '2019-12-10 15:00']
        ]
      ],
      [
        [
          ['Jake', 'Male', '2019-12-12 9:00'], 
          ['Ally', 'Female', '2019-12-12 9:30']
        ],
        [
          ['Jamal', 'Male', '2019-12-12 15:00']
        ]
      ],
      [
        [
          ['Andy', 'Male', '2019-12-13 15:00'],
          ['Katie', 'Female', '2019-12-13 15:30']
        ]
      ]
    ]
    
    2019-12-28 13:57:08
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载