如何只打印一个键的最高值?

时间:2015-02-03 18:34:00

标签: python sorting dictionary

我在尝试解决此任务时遇到问题,所以我在失败几次之后就在这里,我想知道当一个密钥存储多重时,我怎么才能打印一个密钥(名称)的最高值(分数)值如:

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)

1 个答案:

答案 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功能,但该功能并不在您提供的代码中的任何位置。如果您提到尝试在您的问题中完成某些操作的失败,您应该包括失败的代码,以便我们可以帮助您进行调试。我能够为您提供一些代码来完成您的任务以及其他一些建议,但如果您不提供原始代码,我无法对其进行调试。由于这显然是一个功课问题,你一定要花一些时间来弄清楚它为什么一开始就不起作用。