在python的字典中追加多个元素

llycmphe  于 2023-03-09  发布在  Python
关注(0)|答案(5)|浏览(159)

我已经创建了一个程序,将收集学生的名字和分数,并将它们添加到字典中,如果学生已经获得了75分以上,它将打印其名称。下面是代码:

n = 2
b = {}
for i in range(n):
    x = input('name : ')
    y = int(input('marks '))
    b[x] = y

for student in b :
    if b[student] >= 75:
        print('got it ')

有没有什么优雅而又简单的方法可以做到这一点?

yk9xbfzb

yk9xbfzb1#

n = 4  # I am taking 4 students in this example
b = {}
for i in range(n):
    x = input('name : ')
    y = int(input('marks '))
    b[x] = y

b是包含学生姓名和分数的字典:
假设您有4名学生,他们都有姓名和分数:

b={'John': 80, 'Shane': 70, 'Mark': 90, 'Steff': 78}

您可以:

for name,marks in b.items():
    if marks>75:
        print(name)

#output
John
Mark
Steff

也可以在单个列表中进行理解:

[name for name,marks in b.items() if marks>75]
#['John', 'Mark', 'Steff']
krcsximq

krcsximq2#

是的,你可以使用三元运算符:它只允许在单行中测试条件,而不是多行if-else,从而使代码更紧凑。您可以解压缩您创建的字典,而不是在循环中使用索引

n = 2
b = {}
for i in range(n):
    x = input('name : ')
    y = int(input('marks '))
    b[x] = y

for name,mark in b.items() :
    print('got it ') if mark >= 75 else print("you failed")

检查此链接以获取更多信息https://www.geeksforgeeks.org/ternary-operator-in-python/

zhte4eai

zhte4eai3#

您只需在第一个for循环中添加一行代码:

n = 2
b = {}
for i in range(n):
    x = input('name : ')
    y = int(input('marks '))
    b[x] = y
    if y >= 75:
        #print(x + " got " + str(y))
        print(f"{x} got {y}") #the same as the previous line

如果您想存储个成绩超过75分的学生的分数,只需更改代码即可:

n = 2
b = {}
for i in range(n):
    x = input('name : ')
    y = int(input('marks '))
    if y >= 75:
        b[x] = y #store the marks only if the student has gotten more than 75
        #print(x + " got " + str(y))
        print(f"{x} got {y}")

我已经把它减少到只有一个循环。它很短很简单,但是如果你想使用一行程序,看看其他的答案。
要查找获得75分以上的学生人数,只需创建一个变量并在循环中更新它:

n = 2
b = {}
m75 = 0

for i in range(n):
    x = input('name : ')
    y = int(input('marks '))
    if y >= 75:
        b[x] = y
        #print(x + " got " + str(y))
        print(f"{x} got {y}")
        m75 += 1 #m75 = m75 + 1 (increases m75 by 1)

print(m75)

这里,m75是存储有多少学生的分数超过75分的变量。
注:如果复制第三个代码块(使用m75变量),不要忘了修改b[x] = y行的位置,如果要 * 只 * 存储75分以上的学生的分数,就不需要修改,但是如果要存储所有的分数,复制第一个代码块,创建m75变量并将其赋值为0,然后添加第三个代码块中的if

ufj5ltwl

ufj5ltwl4#

你可以使用字典解析来编写如下代码:

marks = {input("Name: ").capitalize(): int(input("Marks: ")) for _ in range(n)}

关于打印:

for name, mark in marks.items():
    if mark>75:
        print(f"{name} got {mark} marks on the test!")

或者将其合并到一个列表解析中(不推荐,因为用上面的方法更容易阅读)

[print(f"{name} got {mark} marks on the test!") for name, mark in marks.items() if mark>75]

这意味着你可以把它写成

marks = {input("Name: ").capitalize(): int(input("Marks: ")) for _ in range(n)}
for name, mark in marks.items():
    if mark>75:
        print(f"{name} got {mark} marks on the test!")

或者

marks = {input("Name: ").capitalize(): int(input("Marks: ")) for _ in range(n)}
[print(f"{name} got {mark} marks on the test!") for name, mark in marks.items() if mark>75]

现在@Maciej Dałek说得很有道理,当前的方法不允许同时传入多个标记,但是,如果我们首先修改marks字典,这个问题可以很容易地得到解决。

marks = {input("Name: ").capitalize(): list(map(int, input("Marks: ").split(","))) for _ in range(n)}

这段代码不只是接受一个单独的Marks输入,而是允许用户输入类似Marks的内容:然后,所有分数将经由map函数(即{"Joe": [1, 54, 99, 24]})作为整数存储在字典内。
现在,我们可以为每个人输入多个分数。现在,只需对printing语句稍作修改,我们就可以接受多个分数值。

minimum_marks = 75
for name, mark in marks.items():
    # Check if any of the marks are above minimum_marks
    if next((True for i in mark if i>minimum_marks), False):
        print(f"{name} got higher than {minimum_marks} on one of their tests!")

next()方法返回生成器序列中的下一项,生成器序列检查是否有高于minimum_marks的分数,如果有,则打印其名称。
因此,总而言之,如果marks只有一个输入,则可以使用上面的代码;否则,可以使用下面的代码:

minimum_marks, n = 75, 4
marks = {input("Name: ").capitalize(): list(map(int, input("Marks: ").split(","))) for _ in range(n)}
for name, mark in marks.items():
    # Check if any of the marks are above minimum_marks
    if next((True for i in mark if i>minimum_marks), False):
        print(f"{name} got higher than {minimum_marks} on one of their tests!")
lqfhib0f

lqfhib0f5#

**首先,如果您传递了多个标记,y = int(input('marks '))将不起作用。**我建议您决定是否使用,或空格作为分隔符进行传递,并按以下方式更改第一个循环:

for i in range(n):
    name = input('name ')
    marks = input('marks ').split('YOUR SEPARATOR')
    marks = [int(element) for element in marks]
    marks_sum = sum(y)
    b.update({name: marks_sum})

如果你想指定哪个学生的分数超过75分,稍后稍微修改一下第二个循环:

good_students = 0
for student in b :
    if b[student] >= 75:
        print(f'{student} got it ')
        good_students += 1
print(f'{good_students} have scored 75 points or more.\n')

相关问题