[英]Sort list of lists containing dictionaries in Python
我正在尝试实施遗传算法来优化途径。 为此,我需要对列表进行排序。
基本列表(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:list indices必须是整数或切片,而不是str
[[{},{}],[{},{}]]
是一个包含
对象
dicts的列表列表(我继续为此答案的其余部分调用对象,因为无论如何数据来自JSON)。 因此,为了按内部对象包含的数字对列表进行排序,您必须在列表中找到给定的对象,然后从中获取数字。
如示例所示并且您的注释确认,距离始终位于您可以通过索引-1访问的最后一个元素中,因此
sort_list = sorted(list_cities, key=lambda k: k[-1]['distance'])
可以工作。
关于另一个问题:我觉得将一个列表中的城市仅放入一个对象中会更自然:
[
{
'cities':[
{'city':'Pau','lat':...,'lon':...},
{<2nd city>},
...
{<last city>}
],
'distance':...
},
...
]
然后它将适用于最初的尝试。
(抱歉笨拙的例子,我在触摸屏上打字,呃)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.