在Python中对包含字典的列表进行排序

时间:2019-05-07 22:37:42

标签: python list sorting dictionary

我正在尝试实施遗传算法来优化途径。为此,我需要对列表进行排序。

基本列表(list_cities)如下:

[[{'city': 'Pau', 'lan': 43.293295, 'lng': -0.36357}, {'city': 'Marseille', 'lan': 43.293551, 'lng': 5.377397}, {'distance': 5572.500801706894}], [{'city': 'Nice', 'lan': 43.70168, 'lng': 7.260711}, {'city': 'Lyon', 'lan': 45.759132, 'lng': 4.834604}, {'distance': 6306.2650380290725}]]

如您所见,我有一个全局列表,其中包含几个包含城市本身的列表(200)和一个距离(代表按列表顺序链接所有城市的总距离)。 我想按最后一个值(即距离)对我的200个城市列表进行排序。 我尝试了很多方法但没有成功。

我最后一次尝试:

sort_list = sorted(list_cities, key=lambda k: k['distance'])

给我以下结果:

  

TypeError:列表索引必须是整数或切片,而不是str

1 个答案:

答案 0 :(得分:0)

[[{},{}],[{},{}]]是包含 objects dict的列表的列表(我将继续为其余答案调用对象,因为数据仍然来自JSON)。因此,为了按内部对象包含的数字对列表进行排序,必须在列表中找到给定的对象,然后从中获取数字。
如示例所示,您的注释得到确认,该距离始终位于您可以通过索引-1访问的最后一个元素中,因此

sort_list = sorted(list_cities, key=lambda k: k[-1]['distance'])

可以工作。

关于另一个问题:我觉得将城市仅放在对象列表中更为自然:

[
 {
  'cities':[
   {'city':'Pau','lat':...,'lon':...},
   {<2nd city>},
   ...
   {<last city>}
  ],
  'distance':...
 },
 ...
]

然后将它与原始尝试一起使用。
(对不起笨拙的示例,我在触摸屏上键入它,嗯)