-2

I have a list of this type :

l = [{"id":"21", "region" :['2', '6', '4']}, {"id":"12", "region" :['1', '3', '8']}]

I want to sort the list on the "region" field, and that also at 2nd index. that is :

l = [{"id":"21", "region" :['2', **'6'**, '4']}, {"id":"12", "region" :['1', **'3'**, '8']}]

How do I do it ? I am aware of itemgetter. But couldn't do with that also.

Anand S Kumar
  • 88,551
  • 18
  • 188
  • 176
user3787291
  • 217
  • 3
  • 12

2 Answers2

2

You can use list.sort() with key argument, passing a lambda expression to the key argument -

In [45]: l = [{"id":"21", "region" :['2', '6', '4']}, {"id":"12", "region" :['1', '3', '8']}]

In [46]: l.sort(key=lambda x: x['region'][1])

In [47]: l
Out[47]:
[{'id': '12', 'region': ['1', '3', '8']},
 {'id': '21', 'region': ['2', '6', '4']}]
Anand S Kumar
  • 88,551
  • 18
  • 188
  • 176
0

refer to sorted(iterable, cmp=None, key=None, reverse=False)

>>> l = [{"id":"21", "region" :['2', '6', '4']}, {"id":"12", "region" :['1', '3', '8']}]

>>> print sorted(l, key=lambda x: x['region'][1], reverse=False)
[{'region': ['1', '3', '8'], 'id': '12'}, {'region': ['2', '6', '4'], 'id': '21'}]

>>> print l
[{'region': ['2', '6', '4'], 'id': '21'}, {'region': ['1', '3', '8'], 'id': '12'}]
Will
  • 792
  • 1
  • 5
  • 22