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)
我也做了很多在线搜索,但找不到任何解决方案。有谁知道如何做到这一点?另外,请记住,我是编程新手,所以请尽量使答案/解释尽可能简单。谢谢!
如果它们已经按顺序排列,我们可以使用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)