Reputation: 13
I have a list of strings like this:
l = ['car58=C:/Files/SB.car58- 094.38.JPG',
'bike53=C:/Files/SB.bike53- 006.33.JPG',
'car46=C:/Files/SB.car46- 88.22.JPG',
'bike12=C:/Files/SB.bike12- 006.33.JPG',
'acc9=C:/Files/SB.acc9- 006.33.JPG']
I'm trying to sort the list using the start (position 0) of each string up to the "=" character ignoring all characters after it, so that the outcome is:
s = ['acc9=C:/Files/SB.acc9- 116.95.JPG',
'bike12=C:/Files/SB.bike12- 006.33.JPG',
'bike53=C:/Files/SB.bike53- 002.12.JPG',
'car46=C:/Files/SB.car46- 88.22.JPG',
'car58=C:/Files/SB.car58- 094.38.JPG']
Edit: The answer provided by Ajax1234 solved my issue:
s = sorted(l, key=lambda x:x[:x.index('=')])
Upvotes: 1
Views: 101
Reputation: 1452
To sort a list use list's method sort()
:
l = ['car58=C:/Files/SB.car58- 094.38.JPG',
'bike53=C:/Files/SB.bike53- 006.33.JPG',
'car46=C:/Files/SB.car46- 88.22.JPG',
'bike12=C:/Files/SB.bike12- 006.33.JPG',
'acc9=C:/Files/SB.acc9- 006.33.JPG']
# sort list in place
l.sort()
print('\n'.join(l))
will print:
acc9=C:/Files/SB.acc9- 006.33.JPG
bike12=C:/Files/SB.bike12- 006.33.JPG
bike53=C:/Files/SB.bike53- 006.33.JPG
car46=C:/Files/SB.car46- 88.22.JPG
car58=C:/Files/SB.car58- 094.38.JPG
Upvotes: 0
Reputation: 71451
You can use .index()
:
s = [['car58=C:/Files/SB.car58- 094.38.JPG'],
['bike53=C:/Files/SB.bike53- 006.33.JPG'],
['car46=C:/Files/SB.car46- 88.22.JPG'],
['bike12=C:/Files/SB.bike12- 006.33.JPG'],
['acc9=C:/Files/SB.acc9- 006.33.JPG']]
new_s = sorted(s, key=lambda x:x[0][:x[0].index('=')])
Output:
[['acc9=C:/Files/SB.acc9- 006.33.JPG'], ['bike12=C:/Files/SB.bike12- 006.33.JPG'], ['bike53=C:/Files/SB.bike53- 006.33.JPG'], ['car46=C:/Files/SB.car46- 88.22.JPG'], ['car58=C:/Files/SB.car58- 094.38.JPG']]
Edit: list.sort()
will also produce the desired output:
s.sort()
print(s)
Output:
[['acc9=C:/Files/SB.acc9- 006.33.JPG'], ['bike12=C:/Files/SB.bike12- 006.33.JPG'], ['bike53=C:/Files/SB.bike53- 006.33.JPG'], ['car46=C:/Files/SB.car46- 88.22.JPG'], ['car58=C:/Files/SB.car58- 094.38.JPG']]
Regarding your recent comment, this should work:
s = ['car58=C:/Files/SB.car58- 094.38.JPG', 'bike53=C:/Files/SB.bike53- 006.33.JPG', 'car46=C:/Files/SB.car46- 88.22.JPG', 'bike12=C:/Files/SB.bike12- 006.33.JPG', 'acc9=C:/Files/SB.acc9- 006.33.JPG']
new_s = sorted(s, key=lambda x:x[:x.index('=')])
Output:
['acc9=C:/Files/SB.acc9- 006.33.JPG', 'bike12=C:/Files/SB.bike12- 006.33.JPG', 'bike53=C:/Files/SB.bike53- 006.33.JPG', 'car46=C:/Files/SB.car46- 88.22.JPG', 'car58=C:/Files/SB.car58- 094.38.JPG']
Upvotes: 1