Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #33974

Re: How to sort list of String without considering Special characters and with case insensitive

Date 2012-11-27 17:54 +0000
From MRAB <python@mrabarnett.plus.com>
Subject Re: How to sort list of String without considering Special characters and with case insensitive
References <e6a4709c-ded7-4092-8822-e3ac02b66271@googlegroups.com>
Newsgroups comp.lang.python
Message-ID <mailman.315.1354039050.29569.python-list@python.org> (permalink)

Show all headers | View raw


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']

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

How to sort list of String without considering Special characters and with case insensitive san <santosh.ssit@gmail.com> - 2012-11-27 09:31 -0800
  Re: How to sort list of String without considering Special characters and with case insensitive MRAB <python@mrabarnett.plus.com> - 2012-11-27 17:54 +0000
  RE: How to sort list of String without considering Special characters and with case insensitive "Prasad, Ramit" <ramit.prasad@jpmorgan.com> - 2012-11-27 18:21 +0000

csiph-web