在按日期的嵌套列表中按时间对元素进行分组?

F16*_*con 5 python list python-3.x

我有一个具有这种结构的嵌套列表:

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

]
Run Code Online (Sandbox Code Playgroud)

目前,这个主列表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']
  ]
]


]
Run Code Online (Sandbox Code Playgroud)

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

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']
  ]
]
Run Code Online (Sandbox Code Playgroud)

我也做了很多在线搜索,但找不到任何解决方案。有谁知道如何做到这一点?另外,请记住,我是编程新手,所以请尽量使答案/解释尽可能简单。谢谢!

Pat*_*ugh 2

如果它们已经按顺序排列,我们可以使用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]
Run Code Online (Sandbox Code Playgroud)

结果是

[
  [
    [
      ['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']
    ]
  ]
]
Run Code Online (Sandbox Code Playgroud)