您可以使用正则表达式来创建仅包含字母的列表(因此不考虑特殊字符),并根据该列表将如下:
import re
class Item:
def __init__(self,item_name,author_name,published_year):
self.__item_name=item_name
self.__author_name=author_name
self.__published_year=published_year
def get_item_name(self):
return self.__item_name
def get_author_name(self):
return self.__author_name
def get_published_year(self):
return self.__published_year
Item1 = Item("The Book of Mormon", "Joseph smith Jr.", 1992)
Ietm2 = Item("Charlettes web", "E.B.White", 2013)
Item3 = Item("The prince of tides", "PatConroy", 2004)
Item4 = Item("Arise! Awake!", "Josephine", 1992)
Item5 = Item("Wonder", "R. J.Palacio", 2008)
item_list = [Item1, Ietm2, Item3, Item4, Item5]
new_item_list = sorted(item_list, key=lambda x: re.findall('\w', x.get_author_name()))
# For each class item in the new list, display its values
for item in new_item_list:
print "{}, {}, {}".format(item.get_item_name(), item.get_author_name(), item.get_published_year())
这将使你:
Charlettes web, E.B.White, 2013
Arise! Awake!, Josephine, 1992
The Book of Mormon, Joseph smith Jr., 1992
The prince of tides, PatConroy, 2004
Wonder, R. J.Palacio, 2008
的re.findall('\w'), x)
正则表达式返回的只是包含在作者姓名的人物名单,从而消除所有的特殊字符。因此,例如,第一个项目将使用排序键排序:
['A', 'n', 'd', 'r', 'e', 'w', 'W', 'h', 'i', 't', 'e', 'h', 'e', 'a', 'd']
请给我们一个预期输出的例子。项目的定义是什么?你是什么意思的特殊字符? – DSLima90
项目是一类。 item1,item2,item3等是Item类的对象。 item_list是对象列表。我要排序基于属性“作者”这是在项目类定义列表“item_list”。问题不考虑,如特殊字符对它们进行排序,‘‘“’,’ - ”等 – Jargon
上面,如果我给输入作为项目1 =项目(‘摩门之书’,“约瑟夫·史密斯小提的问题“,1992) Ietm2 = Item(”Charlettes web“,”EBWhite“,2013) Item3 = Item(”The prince of tides“,”PatConroy“,2004) Item4 = Item(”Arise!Awake!“ ,“Josephine”,1992) Item5 = Item(“Wonder”,“RJPalacio”,2008) new_item_list = [Item1,Ietm2,Item3,Item4,Item5]然后最终的输出应该是[item2,Item4,Item1,项目3,项目5] – Jargon