字典键按字母顺序排序
字典键按字母顺序排序
在之前的问题中,我找到了如何将一些同事的分数以字典的形式拖拽在一起的方法,可以在帖子Reading data separated by colon per line in Python中找到。
现在,如果我想按照姓名顺序排列字典的键,那么Adam
、Dave
和Jack
的分数将按照这个顺序显示。
我尝试使用了下面的方法:
sorted(self.docs_info.items)
但是返回结果为空。我还希望以以下格式返回到IDLE中:
Adam 12 34 Dave 25 23 Jack 13
我尝试使用pprint
方法,但也没有成功。
我该如何解决这个问题?
我的之前的代码(已完成)如下:
from collections import defaultdict d = defaultdict(list) with open('guesses.txt') as f: for line in f: name,val = line.split(":") d[name].append(int(val))
感谢Padraic Cunningham和Antti Haapala!
在上述代码中,我们尝试对一个字典按照键的字母顺序进行排序,并打印出每个键对应的值。然而,我们发现输出的结果并不是按照字母顺序排列的。
造成这个问题的原因是在sorted函数中使用了一个lambda函数作为key参数。lambda函数定义了一个匿名函数,它接受一个元组作为输入,并返回该元组的第一个元素(也就是字典的键)作为排序的依据。然而,在字典的键中存在不同类型的值,如整数和字符串,它们的比较并不是按照字母顺序进行的。因此,lambda函数无法正确地对键进行排序。
为了解决这个问题,我们可以使用Python内置的sorted函数的key参数的另一种形式,即传入一个函数。这个函数将接受一个键作为输入,并返回一个用于排序的值。在这种情况下,我们可以使用str.lower函数将键转换为小写,并将其作为排序的依据。通过这种方式,我们可以确保字典的键按照字母顺序进行正确排序。
下面是修改后的代码:
>>> for name, values in sorted(d.items(), key=lambda x: x[0].lower()): ... print("%s %s" % (name, " ".join(map(str, values)))) ... Adam 12 34 Dave 25 23 Jack 13
在修改后的代码中,我们使用了lambda函数和str.lower函数来对字典的键进行排序。通过将键转换为小写,并将其作为排序的依据,我们可以确保键按照字母顺序进行正确排序。最终,我们可以正确地打印出按照键的字母顺序排列的字典的值。
通过以上的修改,我们解决了原始代码中排序错误的问题,确保了字典的键按照字母顺序进行正确排序。
问题出现的原因是字典中的键没有按字母顺序排序。解决方法是使用sorted()函数对键进行排序,然后使用排序后的键来访问值。另外,可以使用str.join()函数将值转换为字符串,并用空格连接起来。
下面是解决该问题的代码示例:
# 对键进行排序并访问值 for k in sorted(d): print(k, d[k]) # 使用str.join()函数将值转换为字符串 for k in sorted(d): print(k, " ".join(map(str, d[k])))
通过调用sorted()函数对字典进行排序,实际上是调用了sorted()函数对dict.keys()进行排序,因此我们只需要使用排序后的键列表来按所需顺序访问字典。
希望以上内容能够帮助你解决问题。Python语言有时可能会让人感到困惑,但不用担心,随着经验的积累,你会发现它变得越来越容易理解。