Python 按字母顺序对键及其匹配值进行排序

Python 按字母顺序对键及其匹配值进行排序,python,list,sorting,alphabetical,Python,List,Sorting,Alphabetical,我有一个包含名称和值的文本文件,键入方式如下: 我试着按字母顺序从文件中“打印”出来,但我也需要去掉重复的,只显示每个名字的最高分数。我已经开始了,但似乎不起作用。我正在使用python 3.4.1 AClass1=open("Class1.txt") line=AClass1.readlines() for lines in line: key=lines.split(":")[0] val=lines.split(":")[1] for names in s

我有一个包含名称和值的文本文件,键入方式如下:

我试着按字母顺序从文件中“打印”出来,但我也需要去掉重复的,只显示每个名字的最高分数。我已经开始了,但似乎不起作用。我正在使用python 3.4.1

AClass1=open("Class1.txt") 
line=AClass1.readlines() 
for lines in line: 
    key=lines.split(":")[0] 
    val=lines.split(":")[1] 
    for names in sorted(key): 
        print(names,":",val) 
        AClass1.close()

您可以使用字典和方法保留姓名和分数,然后打印每个姓名的最大分数:

d={}
with open("Class1.txt") as f :

   for line in f:
      for i,j in [t.split(':') for t in line.split()]:
        d.setdefault(i,[]).append(int(j))

for i,j in d.iteritems():
   print '{}:{}'.format(i,max(j))

请注意,如果您的分数可能是float,您需要在append方法中使用float而不是int。

我的版本将假设每个条目位于新行:

d = {}
with open('file.txt') as f:
  for line in f.readlines():
    k, v = line.strip().split(":")
    if (k not in d) or d[k] < int(v):
      d[k] = int(v)

然后,您可以使用sortedd.keys进行迭代。

调用readlines和其中一个元素line的结果会更直观,而不是像在代码中那样调用readlines的结果。@VigneshKalai,正如您所说,它返回值,这里的值是一个列表,因此您可以向其中添加任何内容;如何“打印”它,使值保留在正确的键上?钥匙仍按字母顺序排列时?请参阅以获取多种解决方案
d = {}
with open('file.txt') as f:
  for line in f.readlines():
    k, v = line.strip().split(":")
    if (k not in d) or d[k] < int(v):
      d[k] = int(v)