繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM