#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2012
    Posts
    2
    Rep Power
    0

    How to sort list of String without considering Special characters and with case insen


    Please let me know how to sort the list of String in either ascending / descending order without considering special characters and case.
    ex: list1=['test1_two','testOne','testTwo','test_one']
    Applying the list.sort /sorted method results in sorted list ['test1_two', 'testOne', 'testTwo', 'test_one']
    but the without considering the special characters and case it should be
    ['testOne','test_one', 'test1_two','testTwo'] OR ['test_one','testOne','testTwo', 'test1_two' ]

    list.sort /sorted method sorts based on the ascii value of the characters but Please let me knwo how do i achieve my expected one
  2. #2
  3. Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    May 2012
    Location
    39N 104.28W
    Posts
    157
    Rep Power
    2
    Originally Posted by hisan
    Please let me know how to sort the list of String in either ascending / descending order without considering special characters and case.
    ex: list1=['test1_two','testOne','testTwo','test_one']
    Applying the list.sort /sorted method results in sorted list ['test1_two', 'testOne', 'testTwo', 'test_one']
    but the without considering the special characters and case it should be
    ['testOne','test_one', 'test1_two','testTwo'] OR ['test_one','testOne','testTwo', 'test1_two' ]

    list.sort /sorted method sorts based on the ascii value of the characters but Please let me knwo how do i achieve my expected one
    Well, I tried with a dictionary but two of the keys became identical:
    Code:
    >>> list1=['test1_two','testOne','testTwo','test_one']
    >>> d={}
    >>> for i in list1: d[i.replace('_','').lower()]=i
    ...
    >>> list2=d.keys()
    >>> list2.sort()
    >>> list3=[d[i] for i in list2]
    >>> list3
    ['test1_two', 'test_one', 'testTwo']
    >>>
  4. #3
  5. Contributing User
    Devshed Demi-God (4500 - 4999 posts)

    Join Date
    Aug 2011
    Posts
    4,711
    Rep Power
    480
    Code:
    class super_duper:
    
        '''
            f is a transformation function
            retain is a list of objects to keep
    
            $ python -m doctest thisFile.py
    
            >>> import string
            >>> list1 = ['test1_two','testOne','testTwo','test_one']
            >>> list1.sort(key=super_duper(retain=string.lowercase,f=string.lower))
            >>> list1 == 'testOne test_one test1_two testTwo'.split()
            True
        '''
    
        def __init__(self,retain,f):
            self.retain = set(retain)
            self.f = f
    
        def __call__(self,o):
            return ''.join(c for c in self.f(o) if c in self.retain)
    [code]Code tags[/code] are essential for python code and Makefiles!

IMN logo majestic logo threadwatch logo seochat tools logo