繁体   English   中英

从两个单独的字典打印到 .txt 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM