手頭的任務是使用指定的輸入創建字典。
第一個元素是鍵,后面的元素是值。
輸入:
name, George Mason
pa, 100.0, 100.0, 95.0, 95.0, 97.0
lab, 100.0, 100.0, 100.0, 0.0, 100.0
zy, 100.0, 100.0, 100.0, 100.0, 100.0
mid1, 90.0
mid2, 80.0
final, 85.0
預期輸出,如果 project = False:
{'name': 'George Mason',
'pa': [100.0, 100.0, 95.0, 95.0, 97.0],
'lab': [100.0, 100.0, 100.0, 0.0, 100.0],
'zy': [100.0, 100.0, 100.0, 100.0, 100.0],
'mid1': 90.0, 'mid2': 80.0, 'final': 85.0}
預期輸出,如果專案 = True:
{'name': 'George Mason',
'pa': [100.0, 100.0, 95.0, 95.0, 97.0, 97.4, 97.4, 97.4, 97.4],
'lab': [100.0, 100.0, 100.0, 0.0, 100.0, 80.0, 80.0, 80.0, 80.0,
80.0, 80.0],
'zy': [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0,
100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0],
'mid1': 90.0, 'mid2': 80.0, 'final': 85.0}
“如果專案是 True 并且少于 9 個編程作業、11 個實驗室或 15 個 zyBooks,您將需要對所有缺失的成績進行投射值(您不需要考慮成績更多的情況)。對給定的作業型別執行此操作,計算該作業型別的平均成績,然后將該平均值的副本添加到給定成績值的末尾,以便該作業型別具有正確的成績數。例如,如果檔案有以下行“pa, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0”,那么只有 7 個編程作業成績值。如果專案為真,您將計算給定成績的平均值((1.0 2.0 3.0 4.0 5.0 6.0 7.0)/7 = 4.0),并將其添加到等級值串列的末尾,以便字典中鍵“pa”的值將是串列 [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 4.0, 4.0]。”
我什至還沒有達到真正的部分。現在我正試圖弄清楚如何擺脫 KeyError: ('name', 'Carl F. Gauss\n')。我假設這是因為代碼在到達第一行的末尾時不知道繼續下一行。我該怎么做?
我的代碼目前是:
def read_grades_file(filename, project=False):
file = open(filename, 'r')
grade_dict = {}
if project == False:
for line in file.readlines():
values = [line.split(', ')]
key = tuple(values[0])
val = values[1:]
grade_dict[key].append(val)
if project == True:
for line in file.readlines():
values = [line.split(', ')]
key = tuple(values[0])
val = values[1:]
return grade_dict
print(read_grades_file('gauss.grades', project=False))
uj5u.com熱心網友回復:
這是第一部分的建議(這是第二部分的基礎):
def read_grades_file(filename, project=False):
grade_dict = {}
with open(filename, 'r') as file:
for line in file:
key, *values = line.strip().split(', ')
if key in {'pa', 'lab', 'zy'}:
grade_dict[key] = list(map(float, values))
else:
value = values[0]
if key in {'mid1', 'mid2', 'final'}:
value = float(value)
grade_dict[key] = value
if project:
pass
return grade_dict
遍歷檔案的行
.strip()line去掉空格,尤其是在末尾('\n').split(', ')key它并在其第一個專案和其余專案中解壓縮結果串列values- 如果鍵是
pa,lab, 或zy轉換values為浮點數串列并將其分配給key - 否則將 的剩余項提取
values到變數中,如果是、或,value則將其轉換為浮點數,并將其分配給。keymid1mid2finalkey
輸入結果
name, George Mason
pa, 100.0, 100.0, 95.0, 95.0, 97.0
lab, 100.0, 100.0, 100.0, 0.0, 100.0
zy, 100.0, 100.0, 100.0, 100.0, 100.0
mid1, 90.0
mid2, 80.0
final, 85.0
是
{'name': 'George Mason',
'pa': [100.0, 100.0, 95.0, 95.0, 97.0],
'lab': [100.0, 100.0, 100.0, 0.0, 100.0],
'zy': [100.0, 100.0, 100.0, 100.0, 100.0],
'mid1': 90.0,
'mid2': 80.0,
'final': 85.0}
關于第二部分:檢查串列是否具有所需的最小長度。如果不是,計算當前專案的平均值(例如使用sum、math.fsum或statistics.mean)以及.extend()具有平均值的串列以滿足最小長度要求。(如果您需要幫助,請告訴我。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465160.html
上一篇:回圈中的嵌套字典
