Python:更新该对中的一个键,将之前的值添加到新的 - Dictionary / Hash

时间:2015-07-16 22:58:59

标签: python dictionary hash override updating

  

在这个问题中给出一系列配对:“学生的数量”«等级(部分)»,它给出了从最高等级到最低等级的学生的最终成绩,以及具有相同成绩的学生的最终成绩它使用从较低到较高的学号来命令它们。

例如。 的输入

10885 10
70000 6
70000 10
60000 4
70000 4
60000 4
10885 10

输出:

10885 20
70000 20
60000 8

这是我到目前为止的代码:

nice={}

try:

    with open('grades.txt') as file:
        data = file.readlines()

except IOError as ioerr:
    print(str(ioerr))


for each_line in data:
    (number, grade) = each_line.split()
    nice[number]=grade 

for num,grade in sorted(nice.items()):
    print(num,grade)

输出我得到:

10885 10
60000 4
70000 4

这意味着每次更新时都会覆盖成绩,是否可以总结 成绩 如果它属于那么学生编号而不是覆盖它?

喜欢的东西:

for num,grade in sorted(nice.items()):
    if(num in finaldic): //finaldic being a new dicionary that we would create
        //find the number and update the grade adding it to the existent 
    else():
        //add new number and grade

但我相信我的代码的主要问题在于:

    for each_line in data:
        (number, grade) = each_line.split()
        nice[number]=grade 

2 个答案:

答案 0 :(得分:0)

尝试这一点,当分配给字典时,查看该值是否存在,如果不存在,则将其设置为0.然后添加到它:

for each_line in data:
  (number, grade) = each_line.split()
  if number not in nice:
      nice[number] = 0
  nice[number] += int(grade)

答案 1 :(得分:0)

您可以使用setdefault

nice={}
try:

    with open('grades.txt') as file:
        data = file.readlines()

except IOError as ioerr:
    print(str(ioerr))

for each_line in data:
    (number, grade) = each_line.split()
    nice.setdefault(number, []).append(int(grade))
print (nice)

这是输出:

{'10885': [10, 10], '70000': [6, 10, 4], '60000': [4, 4]}

如果您想进一步sum grade,可以使用dictionary comprehension,从nice创建一个新词典,如下所示:

nice_sum = {k:sum(v) for k,v in nice.items()}
print (nice_sum)

nice_sum的输出:

{'10885': 20, '70000': 20, '60000': 8}