【问题标题】:How can I modify my code to give the input in dict datatype?如何修改我的代码以提供 dict 数据类型的输入?
【发布时间】:2020-03-31 11:20:54
【问题描述】:

我的目标: 有n个学生的记录。每个记录包含学生的姓名和他们在数学、物理、化学方面的百分比。标记可以是浮动值。您需要将记录保存在字典数据类型中。学生的名字是关键。标记将值存储在列表中。用户输入学生的姓名。输出该学生获得的平均百分比分数。 这是我的代码:

n = int(input("Enter total number of students:"))

student_marks = {}

for x in range(n):
    name, *line = input().split()
    scores = list(map(float, line))
    student_marks[name] = scores
student_name = input("Enter name of the student whose average you want:")

print("{0:.2f}".format(round(sum(student_marks[student_name]) / len(student_marks[student_name]), 2)))

我实际上得到了这个输出:

Enter total number of students:3
Krishna 67 68 69
Arjun 70 98 63
Malika 52 56 60
Enter name of the student whose average you want:Malika
56.00

但我希望我的示例输入采用包含标记作为列表的 dict 形式,即,

Sample input: {'Krishna':[67,68,69],
               'Arjun':[70,98,63],
               'Malika':[52,56,60]}

如何修改我的代码以提供这样的输入?不使用导入 asl? 请帮忙。提前致谢。

【问题讨论】:

  • 我不明白这个问题的目的!您可能没有注意到,但您已经将输入存储到名为 student_marks 的字典数据类型中。
  • 你想输入多行字典文字,还是只输入单行文字?
  • 单行文字@MisterMiyagi
  • @ShreyaReddy 那么您能否提供正确的示例输入?当前示例输入是一个多行 dict 文字。
  • 请澄清问题到底是什么。见How to Askhelp center

标签: python


【解决方案1】:

嘿,这就是你要找的吗?

不太明白这个问题,但我希望这会有所帮助....


在效率方面可能不是最好的,但它可以完成工作,如果有一个没有成绩的学生将无法工作,但你可以通过额外的逻辑来解决它




student_marks = {}

test = {'Krishna':[67,68,69],
               'Arjun':[70,98,63],
               'Malika':[52,56,60]}

    
_avg_scores = [sum(test[x])/(len((test[x]))) for x in test.keys()]


average_scores ={ list(test.keys())[i] : avg_scores[i] for i in range(len(_avg_scores)) }

student_name = input("Enter name of the student whose average you want:")


print(average_scores[student_name])

【讨论】:

  • 我希望在不使用 import ast 的情况下解决这个问题。谢谢。
  • 我没有导入任何东西 :-)
  • 是的。这也是我一直在寻找的。谢谢:)
【解决方案2】:

您可以像下面这样导入模块 ast 并评估您的输入

import ast
input_dictionary = ast.literal_eval( input() )

【讨论】:

  • 当我检查它时它工作了..它会失败的任何原因?如果是这样,我会编辑
  • 示例输入是一个多行字符串。 input 只读取一行。它将在第一行末尾显示SyntaxError: unexpected EOF while parsing 失败。
  • 啊,我实际上只是通过复制问题中给出的输入来检查。但是,是的,如果在字典的每个元素之后,如果用户键入“输入”,它将如您所说抛出错误。对于给定的情况,它是有效的。
【解决方案3】:

如果我理解正确,您希望将 dict 作为输入,因此您所要做的就是将 dict 的 str 表示形式转换为 dict,为此您可以使用内置的 ast.literal_eval

import ast

n = input("Input as dict")
catalog = ast.literal_eval(n) # catalog object of <class 'dict'>

【讨论】:

  • 这可以通过其他方式完成吗?没有导入 ast? @dejdej
猜你喜欢
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多