以对象为键对字典排序

2024-09-29 21:59:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python很陌生,我正在尝试对一个dict进行排序,它有一些对象作为键。在

我有一个类Student(studID, name),它是dict的键,还有一个等级数组,它是dict的值

它看起来是这样的:

dictEx = {
   Student: [5,6],
   Student: [7,8],
   Student: [10,9]
}

该对象Student有一个getName()方法来获取学生名。我要做的是先按学生的名字对这本词典进行排序,只有当学生的名字相同时,再按年级排序。(如果我有两个叫安德鲁的学生)


Tags: 对象方法name排序数组名字student学生
1条回答
网友
1楼 · 发布于 2024-09-29 21:59:20

您必须在字典中为每个类创建一个实例:

class Student:
   def __init__(self, *args):
      self.__dict__ = dict(zip(['name', 'grade'], args))
   def getName(self):
      return self.name
   def __repr__(self):
      return "{}({})".format(self.__class__.__name__, ' '.join('{}:{}'.format(a, b) for a, b in self.__dict__.items()))

dictEx = {
  Student('Tom', 10): [5,6],
  Student('James', 12): [7,8],
  Student('James', 7): [10,9],
}
new_dict = sorted(dictEx.items(), key=lambda x:(x[0].getName(), x[-1]))

输出:

^{pr2}$

但是请注意,字典是无序的,因此您必须依赖存储在new_dict中的元组列表,或者使用collections.OrderedDict

from collections import OrderedDict
d = OrderedDict()
new_dict = sorted(dictEx.items(), key=lambda x:(x[0].getName(), x[-1]))
for a, b in new_dict:
   d[a] = b

相关问题 更多 >

    热门问题