Python 我想根据对象的属性对对象列表进行排序,而不考虑特殊字符

Python 我想根据对象的属性对对象列表进行排序,而不考虑特殊字符,python,Python,我想根据作者姓名对列表“item_list”进行排序。但在排序时,我应该忽略特殊字符。然后,最终输出应该是一个包含Item2、Item4、Item1、Item3、Item5的列表。您可以使用正则表达式创建一个仅包含字母的列表(因此不考虑特殊字符),并根据该列表进行排序,如下所示: Item1=Item("The Book of Mormon","Joseph smith Jr.",1992 ) Item2=Item("Charlettes web","E.B.White",2013)

我想根据作者姓名对列表“item_list”进行排序。但在排序时,我应该忽略特殊字符。然后,最终输出应该是一个包含Item2、Item4、Item1、Item3、Item5的列表。您可以使用正则表达式创建一个仅包含字母的列表(因此不考虑特殊字符),并根据该列表进行排序,如下所示:

  Item1=Item("The Book of Mormon","Joseph smith Jr.",1992 ) 
   Item2=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,Item2,Item3,Item4,Item5] 
这将给你:

Charlettes网站,E.B.White,2013年
起来!唤醒约瑟芬,1992年
《摩门经》,小约瑟夫·史密斯,1992年
潮汐王子,帕特康罗伊,2004年
Wonder,R.J.Palacio,2008年
re.findall('\w'),x)
正则表达式只返回作者姓名中包含的字符列表,从而删除所有特殊字符。例如,第一个项目将使用排序键进行排序:

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())

您可以使用正则表达式创建仅包含字母的列表(因此不考虑特殊字符),并根据该列表进行排序,如下所示:

  Item1=Item("The Book of Mormon","Joseph smith Jr.",1992 ) 
   Item2=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,Item2,Item3,Item4,Item5] 
这将给你:

Charlettes网站,E.B.White,2013年
起来!唤醒约瑟芬,1992年
《摩门经》,小约瑟夫·史密斯,1992年
潮汐王子,帕特康罗伊,2004年
Wonder,R.J.Palacio,2008年
re.findall('\w'),x)
正则表达式只返回作者姓名中包含的字符列表,从而删除所有特殊字符。例如,第一个项目将使用排序键进行排序:

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())

请给我们一个预期输出的例子。项目的定义是什么?特殊字符是什么意思?Item是一个类。item1、item2、item3等是Item类的对象。项目列表是一个对象列表。我想根据item类中定义的属性“author”对列表“item\u list”进行排序。问题是在不考虑特殊字符的情况下对它们进行排序,例如“,”,“-”等等。如果我将输入作为Item1=Item(《摩门经》,《小约瑟夫·史密斯》,1992年)Ietm2=Item(“Charlettes web》,“E.B.White”,2013年)Item3=Item(“潮汐王子”,“帕特康罗伊”,2004年)Item4=Item(“起来!醒来吧!”,“约瑟芬”,1992年)Item5=Item(“Wonder”,“R.J.Palacio”,2008)new_Item_list=[Item1,Ietm2,Item3,Item4,Item5]那么最终输出应该是[item2,Item4,Item1,Item3,Item5],请给我们一个预期输出的示例。项目的定义是什么?特殊字符是什么意思?Item是一个类。item1、item2、item3等是Item类的对象。项目列表是一个对象列表。我想根据item类中定义的属性“author”对列表“item\u list”进行排序。问题是在不考虑特殊字符的情况下对它们进行排序,例如“,”,“-”等等。如果我将输入作为Item1=Item(《摩门经》,《小约瑟夫·史密斯》,1992年)Ietm2=Item(“Charlettes web》,“E.B.White”,2013年)Item3=Item(“潮汐王子”,“帕特康罗伊”,2004年)Item4=Item(“起来!醒来吧!”,“约瑟芬”,1992年)Item5=Item(“Wonder”,“R.J.Palacio”,2008)new_Item_list=[Item1,Ietm2,Item3,Item4,Item5]然后最终输出应该是[item2,Item4,Item1,Item3,Item5],但我想根据作者对整个对象列表进行排序(这是Item类的第二个参数)在不使用特殊字符的情况下,为什么要删除空格?谢谢MartinEvans@EricDuminil,它主要是显示OP-an方法,显然它可以根据需要进行调整,例如它也可以不区分大小写。但是我想根据作者对整个对象列表进行排序(这是Item类的第二个参数)在不使用特殊字符的情况下,为什么要删除空格?谢谢MartinEvans@EricDuminil,它主要是为了显示OP an方法,显然它可以根据需要进行调整,例如,它也可以不区分大小写。