字典键按字母顺序排序

20 浏览
0 Comments

字典键按字母顺序排序

在之前的问题中,我找到了如何将一些同事的分数以字典的形式拖拽在一起的方法,可以在帖子Reading data separated by colon per line in Python中找到。

现在,如果我想按照姓名顺序排列字典的键,那么AdamDaveJack的分数将按照这个顺序显示。

我尝试使用了下面的方法:

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!

0
0 Comments

在上述代码中,我们尝试对一个字典按照键的字母顺序进行排序,并打印出每个键对应的值。然而,我们发现输出的结果并不是按照字母顺序排列的。

造成这个问题的原因是在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函数来对字典的键进行排序。通过将键转换为小写,并将其作为排序的依据,我们可以确保键按照字母顺序进行正确排序。最终,我们可以正确地打印出按照键的字母顺序排列的字典的值。

通过以上的修改,我们解决了原始代码中排序错误的问题,确保了字典的键按照字母顺序进行正确排序。

0
0 Comments

问题出现的原因是字典中的键没有按字母顺序排序。解决方法是使用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语言有时可能会让人感到困惑,但不用担心,随着经验的积累,你会发现它变得越来越容易理解。

0