【问题标题】:Lists in n dictionaries in a list列表中的 n 个字典中的列表
【发布时间】:2014-12-12 10:50:33
【问题描述】:

这是我正在进行的一个小项目,但我对代码的以下部分有点卡住了。

如您所见,j 是代表学生成绩的字典。我希望 j 在 1 到 n 之间变化,其中 n 是班级中的学生总数,但是因为每个字典(对应于每个学生)没有不同的名称,所以代码以“而成绩为是”开头" 将每个学生的成绩附加到每个字典的所有 ex 或 hw 值(与模型对应的字典除外)。

修改 j 以便我可以在 unique_id 中输入 n 个学生的最佳方法是什么?

编辑:我可以用 j_one、j_two 等替换 j,然后复制并粘贴“空”字典,但我认为如果你有 280 名学生(假设地说),这工作量太大了。

unique_id = [] 

model = {                    
    "Last": "Total",     
    "First": "Possible on",
    "id": "000000",
    "ex": [],
    "hw": []
    }
unique_id.append(dict(model))

yes = {"yes", "ye", "y"}
ex = {"ex", "e", "exam"}
hw = {"hw", "h", "homework"}

j ={
    "Last": "",     
    "First": "",
    "id": "",
    "ex": [],
    "hw": []
}

new_person = input("New student? Type YES or NO. ").lower()

while new_person in yes:   
    j["Last"] =  input("Last Name: ")    
    j["First"] = input("First Name: ")
    j["id"] = input("ID: ")
    unique_id.append(dict(j)) 
    new_person = input("New student? Type YES or NO. ").lower()

grades = input("Input grades? ").lower()

while grades in yes:
    option_grades = input("Pick EX, HW: ").lower()
    if option_grades in ex:
        for i in list(range(len(unique_id))):
            unique_id[i]["ex"].append(input("%s %s Exam: " % (unique_id[i]["Last"], unique_id[i]["First"])))
    elif option_grades in hw:
        for i in list(range(len(unique_id))):
            unique_id[i]["hw"].append(input("%s %s HW: " % (unique_id[i]["Last"], unique_id[i]["First"]))) 


    grades = input("Input more grades? ").lower()

【问题讨论】:

  • 使用学生姓名作为键来区分每个字典或为字典中的每个字典增加一个 id
  • @PadraicCunningham 谢谢。这就是我一直在思考的问题——区分这些字典的最佳方法是什么。
  • 我将在几秒钟内发布一个示例

标签: list python-3.x dictionary iteration


【解决方案1】:

您可以创建一个包含相关信息的模板字典,您可以递增然后添加一个模板并为每个学生递增dict_id

 template ={
    "Last": "",
    "First": "",
    "id": "",
    "ex": [],
    "hw": []
}
j ={

}

new_person = input("New student? Type YES or NO. ").lower()
dict_id = 1
while new_person in yes:
    j[dict_id] = template # add new template for each student
    j[dict_id]["Last"] = input("Last Name: ")
    j[dict_id]["First"] = input("First Name: ")
    j[dict_id]["id"] = input("ID: ")
    unique_id.append(dict(j))
    new_person = input("New student? Type YES or NO. ").lower()
    dict_id += 1 # increment id

您可能需要添加更多逻辑,例如检查学生是否已经在字典中等。但这应该可以帮助您入门。

【讨论】:

  • 谢谢帕德莱克!正是我一直在寻找的!我想到了 j[k],其中 k 从 0 运行到 n(或 n-1),但我想不出一个好的方法来设置。
  • 不用担心,不客气。它并不完美,但应该让你更接近。你也可以只迭代范围,你不需要转换为列表for i in range(len(unique_id)) 可以正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 2022-01-18
  • 2016-01-21
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多