【问题标题】:Python - splitting a string element within a nested list and group by datePython - 在嵌套列表中拆分字符串元素并按日期分组
【发布时间】:2021-04-15 09:35:30
【问题描述】:

*这是作业。我不允许使用任何外部库等 *

我有一个嵌套的数据列表,例如:

patients = [ ['Milos', 'Jones', ['15', '01', '20'], 'male', 'smoker', '210'],
         ['Delia', 'Chan', ['15','03','20'], 'female', 'non-smoker', '170'],
         ['Denise', 'Ross', ['13','02','20'], 'female', 'non-smoker', '150'] ]

我需要能够按月对数据进行分组。我知道我需要将日期 ['15', '01', '20'] 转换为整数,这样我就可以循环并将月份的整数匹配到每个月(范围在(1,13)中)。 我不确定如何在嵌套列表中使用 int() 来访问日期字符串的正确索引位置。

我试过了:

month_data = []
for line in patients: `
    for i in range(1,13): 
        if int(line[2][1]) == i:
            month_data.append(line[5])
               

然后我需要能够根据月份提取权重并创建一个如下所示的嵌套列表,以便我可以计算每个月份的平均值等内容。我不知道如何在上面的嵌套列表中使用 for 循环并提取特定元素的值。

data_grouped_month = [[210, 150,200,143,200,201,129],[150,203,187,199,176,154]]

我将不胜感激。我也很想了解,如果能给出解释,将不胜感激。

ETA - 是的,这是家庭作业。老师告诉我们要使用所有可用的资源,包括告诉我们有关该网站的信息以获取课外帮助。家庭作业并不重要,因为他们对我们使用任何可用资源完成作业的能力更感兴趣。我已经使用文件完成了许多其他步骤来达到这一点,但是如果没有这一步,我将无法完成我打算学习的许多其他步骤。现在考试又是另外一回事了,如果我不真正学习和理解,那么我在考试中就没有希望了,因为这是大部分分数的来源。

【问题讨论】:

  • [int(i) for i in ['15','01','20']] 这是在 python 中将字符串转换为 int 的示例,我建议您将问题拆分为点,并从第一个点开始到最终输出。如果您遇到任何问题,请在 SO 中尽您的努力
  • 我认为使用Stack Overflow 为你做这件事使用外部库
  • 我会更新我所尝试的。我尝试了很多不同的东西。

标签: python list nested


【解决方案1】:

如果您的数据结构始终相同,则应该不会很复杂。 您可以像这样遍历您的列表:

patients = [
    ["Milos", "Jones", ["15", "01", "20"], "male", "smoker", "210"],
    ["Delia", "Chan", ["15", "03", "20"], "female", "non-smoker", "170"],
    ["Denise", "Ross", ["13", "02", "20"], "female", "non-smoker", "150"],
]

data_grouped_month = [[] for month in range(12)] #You create your nested list 

for patient in patients : #Loop through each patient of the list
    month = int(patient[2][1]) #You get the month and convert it 
    weight = int(patient[5]) #You get the weight and convert it 
    data_grouped_month[month - 1].append(weight) #You add the month to the right place of tour nested list

print(data_grouped_month)

结果是:

[[210], [150], [170], [], [], [], [], [], [], [], [], []]

但它仅在所有月份都在同一年时才有效(我的意思是,如果您有 2020 年 1 月和 2021 年 1 月的数据,它将被组合在 data_grouped_month 的同一元素中)

【讨论】:

  • 谢谢。这并不完全符合我的需要。但我能够适应我需要的东西。感谢您的 cmets,我也了解它的工作原理。
【解决方案2】:
patients = [
    ["Milos", "Jones", ["15", "01", "20"], "male", "smoker", "210"],
    ["Delia", "Chan", ["15", "03", "20"], "female", "non-smoker", "170"],
    ["Denise", "Ross", ["13", "02", "20"], "female", "non-smoker", "150"],
]


groups = {}
for _, _, (_, m, _), *_, w in patients:
    groups.setdefault(int(m), []).append(int(w))

print(list(groups.values()))

打印三组列表(在您的输入数据中,您有三个不同的月份):

[[210], [170], [150]]

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 2015-05-14
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多