我在尝试解决此任务时遇到问题,所以我在失败几次之后就在这里,我想知道当一个密钥存储多重时,我怎么才能打印一个密钥(名称)的最高值(分数)值如:
Rob Scored: 3,5,6,2,8
Martin Scored: 4,3,1,5,6,2
Tom Scored: 7,2,8
名称是关键,分数是值。现在我希望获得
的输出 Martin Scored: 6
Rob Scored: 8
Tom Scored: 8
然而,当我尝试max
函数时,它会忽略字母顺序。正如一方不是一个要求,以及其他分数必须保存以供后期使用。
from collections import OrderedDict
dictionary = {}
for line in f:
firstpart, secondpart = line.strip().split(':')
dictionary[firstpart.strip()] = secondpart.strip()
columns = line.split(": ")
letters = columns[0]
numbers = columns[1].strip()
if d.get(letters):
d[letters].append(numbers)
else:
d[letters] = list(numbers)
sorted_dict = OrderedDict(
sorted((key, list(sorted(vals, reverse=True)))
for key, vals in d.items()))
print (sorted_dict)
答案 0 :(得分:0)
这样做你想要的:
# You don't need to use an OrderedDict if you only want to display in
# sorted order once
score_dict = {} # try using a more descriptive variable name
with open('score_file.txt') as infile:
for line in infile:
name_field, scores = line.split(':') # split the line
name = name_field.split()[0] # split the name field and keep
# just the name
# grab all the scores, strip off whitespace, convert to int
scores = [int(score.strip()) for score in scores.split(',')]
# store name and scores in dictionary
score_dict[name] = scores
# if names can appear multiple times in the input file,
# use this instead of your current if statement:
#
# score_dict.setdefault(name, []).extend(scores)
# now we sort the dictionary keys alphabetically and print the corresponding
# values
for name in sorted(score_dict.keys()):
print("{} Scored: {}".format(name, max(score_dict[name])))
请将本文件改为:Code Like a Pythonista。它有很多关于如何编写更好的代码的建议,我在这里学习了dict.setdefault()
方法来处理值是列表的字典。
另一方面,在您的问题中,您提到尝试使用max
功能,但该功能并不在您提供的代码中的任何位置。如果您提到尝试在您的问题中完成某些操作的失败,您应该包括失败的代码,以便我们可以帮助您进行调试。我能够为您提供一些代码来完成您的任务以及其他一些建议,但如果您不提供原始代码,我无法对其进行调试。由于这显然是一个功课问题,你一定要花一些时间来弄清楚它为什么一开始就不起作用。