gpt4 book ai didi

python - 获取嵌套列表中特定字符串的索引信息?在Python 3中

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:25 25 4
gpt4 key购买 nike

所以我有一个包含很多嵌套列表的列表,其中包括学生姓名和他们的测试分数,我想知道如何通过使用变量搜索来检索包含特定学生分数的子列表的索引(位置)测验开始时用户输入的“名称”。列表子列表是通过导入文本文件创建的,我使用的代码是:

with open('class1quizscoreboard.txt') as scoreboard:
for line in scoreboard:
importedscores.append(line.strip().split(',')

这有效,列表如下所示:

[['EmilyScott ', ' 3'], ['Student Name ', ' 2'], ['Another Student ', ' 1'], ['Third Student ', ' 10']]

所以我想通过搜索变量名称来找到子列表,然后找到该子列表的位置(如果该名称已经在分数列表中)。然后,我会将另一个测试分数添加到列表中,但如果不存在,只需创建另一个列表。

我想过用带有 FOR 循环的 IF 来解决这个问题,但没有成功

for sublist in importedscores:
if sublist[0] == search:
print ("Found it!"), sublist

返回“未找到”,即使我使用了一个我知道肯定在列表中的名字

我可能以完全错误的方式处理这个问题,但最终目标是能够将学生的新分数添加到他们现有的列表中(如果他们已经有一个)

感谢您的帮助

最佳答案

按字典:

  1. 通过csv模块读取txt文件,因为文件具有明确的结构。
  2. 根据文件内容创建字典,其中键是名称,值是整数,即分数
  3. 为现有学生添加新分数。
  4. 为新序列创建新条目。

演示:

import csv
import pprint
p = "input34.txt"

with open(p, "rb") as fp:
root = csv.reader(fp, delimiter=',')
result = {}
for i in root:
result[i[0].strip()] = int(i[1].strip())

print "Debug1 result:"
pprint.pprint (result)

serach_key = "Test student"
add_value = 5

if serach_key in result:
result[serach_key] = result[serach_key] + add_value
else:
result[serach_key] = add_value

print "Debug2 result:"
pprint.pprint (result)

serach_key = "Another Student"
add_value = 5

if serach_key in result:
result[serach_key] = result[serach_key] + add_value
else:
result[serach_key] = add_value

print "Debug3 result:"
pprint.pprint (result)

输出:

vivek@vivek:~/Desktop/stackoverflow$ python 34.py 
Debug1 result:
{'Another Student': 1,
'Emily Scott': 3,
'Student Name': 2,
'Third Student': 10}
Debug2 result:
{'Another Student': 1,
'Emily Scott': 3,
'Student Name': 2,
'Test student': 5,
'Third Student': 10}
Debug3 result:
{'Another Student': 6,
'Emily Scott': 3,
'Student Name': 2,
'Test student': 5,
'Third Student': 10}
<小时/>

按列表:

演示:

mport csv
import pprint
p = "input34.txt"

with open(p, "rb") as fp:
root = csv.reader(fp, delimiter=',')
result = []
for i in root:
result.append([i[0].strip(), int(i[1].strip())])

print "Debug1 result:"
pprint.pprint (result)

serach_key = "Test student"
add_value = 5

add_flag = False
for i,j in enumerate(result):
if serach_key==j[0]:
j[1] = j[1] + add_value
add_flag = True
break
if add_flag==False:
result.append([serach_key, add_value])
print "Debug2 result:"
pprint.pprint (result)

serach_key = "Another Student"
add_value = 5

add_flag = False
for i,j in enumerate(result):
if serach_key==j[0]:
j[1] = j[1] + add_value
add_flag = True
break
if add_flag==False:
result.append([serach_key, add_value])
print "Debug3 result:"
pprint.pprint (result)

输出:

vivek@vivek:~/Desktop/stackoverflow$ python 34.py 
Debug1 result:
[['Emily Scott', 3],
['Student Name', 2],
['Another Student', 1],
['Third Student', 10]]
Debug2 result:
[['Emily Scott', 3],
['Student Name', 2],
['Another Student', 1],
['Third Student', 10],
['Test student', 5]]
Debug3 result:
[['Emily Scott', 3],
['Student Name', 2],
['Another Student', 6],
['Third Student', 10],
['Test student', 5]]
<小时/>

使用collection.defaultdict来优化代码。因此无需检查 key 是否在字典中。

例如:

>>> import collections
>>> result = collections.defaultdict(int)
>>> result["student 1"] = 10
>>> result["student 2"] = 20
>>> print result
defaultdict(<type 'int'>, {'student 1': 10, 'student 2': 20})
>>> result["student 2"] = result["student 2"] + 2
>>> print result
defaultdict(<type 'int'>, {'student 1': 10, 'student 2': 22})
>>> result["student 3"] = result["student 3"] + 5
>>> print result
defaultdict(<type 'int'>, {'student 1': 10, 'student 2': 22, 'student 3': 5})
>>>

关于python - 获取嵌套列表中特定字符串的索引信息?在Python 3中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com