On 2012-11-27 17:31, san wrote:
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
(I'm using Python 3.)
The .sort method accepts a 'key' argument, which lets you pass a
function that transforms the value being sorted before comparison:
>>> def make_key(string):
return string.replace('_', '').upper()
>>> list1 = ['test1_two', 'testOne', 'testTwo', 'test_one']
>>> list1.sort(key=make_key)
>>> list1
['test1_two', 'testOne', 'test_one', 'testTwo']
I don't know how you define 'special'.
You could remove any characters which are special or keep any
characters which are not special, depending on how many characters are
defined as 'special':
from string import ascii_letters
# Sets are faster for this kind of thing.
ascii_letters = set(ascii_letters)
def make_key(string):
return ''.join(c for c in string if c in ascii_letters).upper()
list1 = ['test1_two', 'testOne', 'testTwo', 'test_one']
list1.sort(key=make_key)
print(list1)
# Output is: ['testOne', 'test_one', 'test1_two', 'testTwo']
--
http://mail.python.org/mailman/listinfo/python-list