You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.5字典按Route对象package_name排序分组输出问题

解决Python 3.5字典按Route对象package_name排序并分组输出的问题

嘿,在Python 3.5里处理这个需求其实挺清晰的——毕竟3.5的字典是无序的,所以我们得先把字典里的键值对提取出来,再做排序和分组操作。下面是具体的实现步骤和代码示例:

1. 先导入需要的工具模块

我们要用itertools.groupby来做分组,所以先把它导入进来:

import itertools

2. 提取字典条目并按package_name排序

把你的字典d里的键值对(也就是路由的键和对应的Route对象)取出来,然后按照每个Route对象的package_name字段排序:

# 提取键值对,按package_name排序
sorted_routes = sorted(d.items(), key=lambda item: item[1].package_name)

这里的lambda item: item[1].package_name意思是:用每个键值对里的值(也就是Route对象)的package_name作为排序的依据,这样相同package的路由就会挨在一起。

3. 按package_name分组

用itertools.groupby对排序后的列表进行分组,同样以package_name作为分组的标识:

# 按package_name分组
grouped_routes = itertools.groupby(sorted_routes, key=lambda item: item[1].package_name)

⚠️ 这里要注意:groupby只能对已经按分组键排序好的序列生效,所以我们必须先排序再分组,不然同package的条目可能会被分到不同组里。

4. 按指定格式输出分组结果

假设你想要的输出格式是:每个分组先显示包名,下面列出该包下所有路由的键和Route对象的name属性,那可以这么写:

# 遍历分组并输出
for package_name, route_group in grouped_routes:
    print(f"Package: {package_name}")
    for route_key, route_obj in route_group:
        print(f"  - Route Key: {route_key}, Route Name: {route_obj.name}")
    print()  # 用空行分隔不同分组,看起来更清晰

完整代码示例

把所有步骤整合起来,完整的代码就是这样:

import itertools

# 你的原始字典
d = {'automate': <Routing.Route.Route object at 0x2b7f84835c18>, 
     'index': <Routing.Route.Route object at 0x2b7f8486e5c0>, 
     'index_1': <Routing.Route.Route object at 0x2b7f8483d400>, 
     'index_2': <Routing.Route.Route object at 0x2b7f84835f98>, 
     'second': <Routing.Route.Route object at 0x2b7f8483d470>, 
     'test_route_parameters': <Routing.Route.Route object at 0x2b7f8486e588>}

# 排序并分组
sorted_routes = sorted(d.items(), key=lambda item: item[1].package_name)
grouped_routes = itertools.groupby(sorted_routes, key=lambda item: item[1].package_name)

# 输出分组结果
for package_name, route_group in grouped_routes:
    print(f"Package: {package_name}")
    for route_key, route_obj in route_group:
        print(f"  - Route Key: {route_key}, Route Name: {route_obj.name}")
    print()

一些额外的小技巧

  • 如果你的package_name有大小写差异,想要忽略大小写排序,把排序的key改成lambda item: item[1].package_name.lower()就行
  • 如果需要把分组结果存成一个新字典(键是package_name,值是对应路由的列表),可以用字典推导式快速转换:
grouped_dict = {pkg: list(route_group) for pkg, route_group in grouped_routes}

这样后续你就能直接用这个分组后的字典做其他操作啦。

内容的提问来源于stack exchange,提问作者vmele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:24