我有一個這樣的嵌套字典:
class_grade = {
'classA': {'Andi':89, 'Budi':87, 'Caca':76, 'Dodi':74},
'classB': {'Ega':67, 'Fani':97, 'Gani':96, 'Hani':78},
'classC': {'Ida':87, 'Joko':64, 'Keke':76, 'Lani':58},
'classD': {'Momo':68, 'Nani':67, 'Oga':76, 'Pina':65}}
我想把每個學生的成績減5,我寫的代碼是這樣的:
class_grade ['classA']['Andi'] = class_grade ['classA']['Andi'] - 5
class_grade ['classA']['Budi'] = class_grade ['classA']['Budi'] - 5
但是一個一個的改就很累了,怎么能一下子降低每個學生的成績呢?謝謝
uj5u.com熱心網友回復:
如果我理解正確,您可以使用嵌套字典理解:
{key : {k : v - 5 for k, v in value.items()}
for key, value in class_grade.items()}
Out[585]:
{'classA': {'Andi': 84, 'Budi': 82, 'Caca': 71, 'Dodi': 69},
'classB': {'Ega': 62, 'Fani': 92, 'Gani': 91, 'Hani': 73},
'classC': {'Ida': 82, 'Joko': 59, 'Keke': 71, 'Lani': 53},
'classD': {'Momo': 63, 'Nani': 62, 'Oga': 71, 'Pina': 60}}
uj5u.com熱心網友回復:
您也可以使用Pandas完成您的作業:
必要的匯入是:
import pandas as pd
從將嵌套字典轉換為 pandasonic DataFrame 開始:
grades = pd.DataFrame.from_dict(class_grade)
然后你可以一次性減去你的價值:
res = grades - 5
下一步是定義一個應用于res每一列的函式:
def colConv(col):
return col.dropna().astype(int).to_dict()
然后將此函式應用于res:
wrk = res.apply(colConv)
到目前為止,索引由連續的整陣列成,因此您應該將其替換為原始列名:
wrk.index = grades.columns
而最后一步是轉換WRK到詞典,并保存回下class_grade:
class_grade = wrk.to_dict()
結果是:
{'classA': {'Andi': 84, 'Budi': 82, 'Caca': 71, 'Dodi': 69},
'classB': {'Ega': 62, 'Fani': 92, 'Gani': 91, 'Hani': 73},
'classC': {'Ida': 82, 'Joko': 59, 'Keke': 71, 'Lani': 53},
'classD': {'Momo': 63, 'Nani': 62, 'Oga': 71, 'Pina': 60}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322850.html
