[英]Printing to a .txt file from two separate dictionaries
我正在尝试将成绩列表打印到保存的 txt 文件中。 问题是,我有两本独立的词典,一本用于成绩,一本用于评分。 它们共享学生 ID 的公共密钥,因此我尝试使用嵌套循环和 If 调用,但它只是一遍又一遍地返回列表中的最后一个值。
代码如下,任何帮助将不胜感激。
marks=False
while marks is False:
try:
stuff=input("which file do you want to open? ")
f=open(stuff)
lines=f.readlines()
f.close()
marks=True
except:
print("No good, try again")
a={}
count=0
for line in lines:
value=line.split(',')
ID=value[0]
mark=value[1]
print(ID, mark)
a.update({ID:mark})
count+=1
print()
print("Number of students is: ",count)
grades={}
for k,v in a.items():
v=int(v)
if v in range(0,35):
grade="E"
print("Student with id number ",k,"scored mark",v,"and a grade of",grade)
grades.update({k:grade})
elif v in range(35,50):
grade="D"
print("Student with id number ",k,"scored mark",v,"and a grade of",grade)
grades.update({k:grade})
elif v in range(50,65):
grade="C"
print("Student with id number ",k,"scored mark",v,"and a grade of",grade)
grades.update({k:grade})
elif v in range(65,80):
grade="B"
print("Student with id number ",k,"scored mark",v,"and a grade of",grade)
grades.update({k:grade})
elif v in range(80,101):
grade="A"
print("Student with id number ",k,"scored mark",v,"and a grade of",grade)
grades.update({k:grade})
print(a)
print()
print(grades)
print()
for k,v in a.items():
v=int(v)
if v in range(0,35):
bar='#'*int(v/2)
print(k,v,bar)
elif v in range(35,50):
bar='#'*int(v/2)
print(k,v,bar)
elif v in range(50,65):
bar='#'*int(v/2)
print(k,v,bar)
elif v in range(65,80):
bar='#'*int(v/2)
print(k,v,bar)
elif v in range(80,101):
bar='#'*int(v/2)
print(k,v,bar)
print()
f=open("report.txt",'w')
print('{a:^12}{b:^8}{c:^8}'.format(a='student ID', b='Mark', c='Grade'),file=f)
for k,v in a.items():
k=ID
v=mark
for g,h in grades.items():
h=grade
if g==ID:
print('{a:^12}{b:^8}{c:^8}'.format(a=ID,b=mark,c=grade),file=f)
f.close()
在最后一个循环中,代码迭代字典的键/值对,但从未真正使用它们,因为它会覆盖它们。
让我给你看一些评论:
for k,v in a.items():
# here, k and v are picked from the dictionary 'a'
k=ID # <-- this always overwrites the value of k to ID
v=mark # <-- this always overwrites the value of v to mark
for g,h in grades.items(): # since dictionaries 'a' and 'grades' have same
# key, you don't need to iterate through all the keys
h=grade
if g==ID:
print('{a:^12}{b:^8}{c:^8}'.format(a=ID,b=mark,c=grade),file=f)
更好的方法如下:
f=open("report.txt",'w')
print('{a:^12}{b:^8}{c:^8}'.format(a='student ID', b='Mark', c='Grade'),file=f)
for ID,mark in a.items(): # iterate over key/value pairs of 'a'
grade = grades.get(ID) # just lookup the value from ID
print('{a:^12}{b:^8}{c:^8}'.format(a=ID,b=mark,c=grade),file=f)
f.close()
我还将变量名称从“a”更改为更具描述性的名称。
组合两个字典,然后从新字典中提取所有变量:
ds = [a, grades]
d = {}
for k in grades.keys():
d[k] = tuple(d[k] for d in ds)
print()
for k,[g,m] in d.items():
print('{a:^12}{b:^8}{c:^8}'.format(a=k,b=m,c=g),file=f)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.