2016-03-19 82 views
0

我的字典里是这样的:我如何从一个存储python字典中多个值的键访问值?

{James: [10, 7, 9], 'Bob': [3, 8, 4], 'Charles': [6, 2, 5]} 

我想要做的是,输出每个用户在谁的顺序得分拿到了最高分。和他们的名字。此刻,我只能打印分数最高的学生:

inverse = [(value, key) for key, value in score_dict.items()] 

print (max(inverse)[1]) 

输出是:

James 

,我想获得的输出是:

James 10 

Bob 8 

Charles 6 
+0

'print(“\ n”.join(inv [1] for inv in sorted(inverse)))' – zondo

+1

未来的单词:好像你不想从键中移除一个值,而是你想*访问*它。如果你删除了一个值,它不再在列表中,但是如果你访问它,你只需要获得它的值并将它保留在列表中。我为你编了一个编辑。 – BHustus

+0

是否要将每个人的最高分存储到新的字典或其他内容中,还是只打印每个人的最高分?因为对于后者,你可以简单地在score_dict.items()中输入k,v:print(k,max(v))'。 – Reti43

回答

0

您可以使用userwise highscore创建一个元组列表,然后使用score对它进行排序。像这样的,

x = {'James': [10, 7, 9], 'Bob': [3, 8, 4], 'Charles': [6, 2, 5]} 
y = [(k, max(v)) for k, v in x.items()] 
for k, v in sorted(y, key=lambda a: a[1], reverse=True): 
    print (k, v) 
+0

谢谢@Muctadir!有用。但是,请您评论一下,以便我确信每行中特别是第3行发生了什么。为什么会创建这么多变量? – Minions

1

你根本不需要反字典;你并没有试图找到单人最高分全部的学生;相反,你想找到每个学生的最高分。

要做到这一点,做到以下几点:

scores = {'James': [10, 7, 9], 'Bob': [3, 8, 4], 'Charles': [6, 2, 5]} 
for name in scores.keys: 
    print(name + " " + str(max(scores[name]))) 

这就避免了一个新字典的需要。其中最复杂的部分是str(max(scores[name])),它从最里面到最外面读取:“取名字,找到名字的分数列表,在他们的分数中找到最大值,然后将其转换为字符串”。

+0

我试图找到每个学生的最高分数。并且由于数据已从文件(已转换为csv文件)放入字典中,因此该文件不是'可以支持的' – Minions

+0

我相信我的代码示例*会*返回每个学生的最高分数......而且我不相信我理解你的意思是“不可赎回”。请详细说明?如果文件已经在字典中,我不确定为什么它会影响我的代码示例。 – BHustus

相关问题