我正在尝试实施遗传算法来优化途径。为此,我需要对列表进行排序。
基本列表(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
答案 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':...
},
...
]
然后将它与原始尝试一起使用。
(对不起笨拙的示例,我在触摸屏上键入它,嗯)