Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #33974
| 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) |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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