Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > How to sort list of String without considering Special characters andwith case insensitive

Reply
Thread Tools

How to sort list of String without considering Special characters andwith case insensitive

 
 
san
Guest
Posts: n/a
 
      11-27-2012
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
 
Reply With Quote
 
 
 
 
MRAB
Guest
Posts: n/a
 
      11-27-2012
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']

 
Reply With Quote
 
 
 
 
Prasad, Ramit
Guest
Posts: n/a
 
      11-27-2012
san wrote:

>
> Please let me know how to sort the list of Stringin 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
> achievemy expected one


You can pass a key function into list.sort() and sorted(). This
allows you to customize the sorting. In the below examples
I use lambda but you can use a non-lambda function (if youneed
more complexity).

Case insensitive searches are often done by converting the
strings being compared into the same case. Here I turned
them all uppercase.

lst = ['test1_two', 'testOne', 'testTwo', 'test_one']
lst.sort(key=lambda x: x.upper())

This will filter non-alphanumeric characters. You may
be able to create and use a translation table instead.

lst.sort( key=lambda x: ''.join( c.upper() for c in x if c
in string.letters+string.digits ) )


~Ramit



This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Re: Sort list of dictionaries by key (case insensitive) Nico Grubert Python 2 01-13-2010 03:37 PM
Re: Sort list of dictionaries by key (case insensitive) Nico Grubert Python 2 01-13-2010 12:35 PM
Sort list of dictionaries by key (case insensitive) Nico Grubert Python 2 01-13-2010 11:11 AM
how to case select with case-insensitive string ? Tee ASP .Net 3 06-23-2004 07:40 PM



Advertisments