【问题标题】:How to group elements in a list of strings and convert them into a dictionary?如何对字符串列表中的元素进行分组并将它们转换为字典?
【发布时间】:2020-04-10 20:11:50
【问题描述】:

所以我的任务是将字符串列表转换为元组字典。字典的键和值由空字符串分隔。对于字典,键应该是学生的名字,两个值应该是他们的分数和等级。成绩应该是字符串形式。列表如下:

['John','85 A','90 A+','','David','71 B-','80 A-','','Liz','95 A+','66 C+']

这应该给我一个结果:

{'John':([85,90],['A','A+']),'David':([71,80],['B-','A-']),'Liz':([95,66],['A+','C+']}

我正在自学元组和字典,所以我不知道如何将字符串分成与键对应的两部分。也不知道如何通过''空字符串将它们分组...... 任何帮助将不胜感激:)

【问题讨论】:

  • 一些可能对您有所帮助的事情。首先,在列表中,每组数据是列表中的3个元素,后跟一个空格(末尾除外)。其次,对于每组数据,第一个元素是关键。第二个和第三个元素包含数字和字符等级。这可以使用 str.split(" ") 进行拆分,其中结果的第一个元素将是数字等级,第二个元素将是字符等级。要将元素添加到列表中,可以使用 list.append(value)
  • 实际上,经过进一步审查,最后两个元素似乎在您的列表中是分开的。这是正确的格式吗? ['66','C+'] 还是 ['66 C+']
  • 感谢您的帮助,我很困惑,因为我不知道如何拆分每组数据。像我如何使用空字符串来拆分它们?
  • 我的错。已经修好了。

标签: python string dictionary tuples


【解决方案1】:

这是一个新的建议解决方案。

list = ['John','85 A','90 A+','','David','71 B-','80 A-','','Liz','95 A+','66 C+']
newList = []
tmp = []
for element in list:
    if (element != ''):
        tmp.append(element)
    else:
        newList.append(tmp)
        tmp = []
newList.append(tmp)

students = {}
for student in newList:
    curStudent = student[0]
    students[curStudent] = ([], [])
    for i in range(1, len(student)):
        splitStr = student[i].split(" ")
        students[curStudent][0].append(int(splitStr[0]))
        students[curStudent][1].append(splitStr[1])

print(students)

首先,我们将列表除以空格。我们知道列表不会以空格结尾,因此在遍历列表之后,我们将 tmp 列表附加到我们的 newList 中。我们最后的 newList 看起来像这样。

[['John', '85 A', '90 A+'], ['David', '71 B-', '80 A-'], ['Liz', '95 A+', '66 C+']]

现在我们可以轻松地遍历每个学生。我们知道第一个值将是键,任何后续值都将是数字和字符等级。由于第一个值是键,我们可以创建一个包含 2 个空列表的元组,用于数字和字符等级。由于我们正在遍历一个特定的学生,我们知道第一个元素是字典的键,因此我们可以将我们解析的内容附加到它。

我们的结果是

{'John': ([85, 90], ['A', 'A+']), 'David': ([71, 80], ['B-', 'A-']), 'Liz': ([95, 66], ['A+', 'C+'])}

【讨论】:

  • 好吧,它并不一定表明索引 0,4,8 将是一个名称(或键)。每个集合的长度可能不同......数据集合实际上是用空字符串分隔的,所以key是空字符串右边的第一个元素,而不是4的倍数:)
  • 啊,我明白了。我是根据输入来的。没问题,我会提供更稳健的解决方案和解释。
  • 感谢您的帮助!我认为 newList 是我们的数据集列表的列表,然后我们通过将第一个元素设置为 key 将 newList 中的子列表分组,将剩余的术语拆分为 ' ',并将它们分别添加到元组中的两个列表中。这就是全部逻辑吗?
猜你喜欢
  • 2014-11-27
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2015-01-29
  • 1970-01-01
  • 2015-04-08
相关资源
最近更新 更多