我有一个名为grouped_items的初始dict,我需要通过
grouped_items =
{
"tcp_permit": [],
"tcp_deny": [],
"udp_permit": [],
"udp_deny": [],
"ip_permit": [],
"ip_deny": [],
"icmp_permit": [],
"icmp_deny": []
}
group_items = ['_7_tcp_permit_bgp', '_8_icmp_permit_', '_9_udp_permit_domain', '_10_ip_permit_']
separators = ['tcp_permit','tcp_deny', 'udp_permit','udp_deny', 'ip_permit','ip_deny', 'icmp_permit','icmp_deny']
for item in group_items:
for separator in separators:
if separator in item:
grouped_items[separator].append(item)
break
字符串
结果grouped_items:
grouped_items =
{
"tcp_permit": [
"_7_tcp_permit_bgp"
],
"udp_permit": [
"_9_udp_permit_domain"
],
"ip_permit": [
"_10_ip_permit_"
],
"icmp_permit": [
"_8_icmp_permit_"
]
}
型
目标:我想按照group_items而不是separator的顺序对grouped_items重新排序
grouped_items =
{
"tcp_permit": [
"_7_tcp_permit_bgp"
],
"icmp_permit": [
"_8_icmp_permit_"
],
"udp_permit": [
"_9_udp_permit_domain"
],
"ip_permit": [
"_10_ip_permit_"
]
}
型
我尝试使用
item_order = {item: index for index, item in enumerate(group_items)}
sorted_grouped_items = {key: grouped_items[key] for key in sorted(grouped_items, key=lambda x: item_order.get(x, float('inf')))}
型
但是仍然没有成功。有没有机会根据value而不是voa key重新排序dict?Python 3.11.3
3条答案
按热度按时间k5ifujac1#
谢谢你的回答,是的,我得到了同样的结果:顺便说一句,经过一些测试,我能够通过创建一个字典来存储group_items中的项目顺序来获得结果
字符串
然后
型
因此,基本上为group_items分配一个数字键,并将其用作排序操作符。
型
fd3cxomn2#
我想:要创建一个包含字典'grouped_items'的键的列表,看起来你再次写入了所有键来形成一个列表。这不是必需的。只要通过我的代码
我已经省略了你已经声明的变量。所以,要检查输出,请添加你声明的变量。
下面的代码包含一个行将给予您想要的输出
字符串
上面的一个liner相当于下面的代码
型
tjjdgumg3#
字符串
问题是,“_10_ip_permit”将排序在“_7_tcp_bgp_bgp”之前,因为字符串以“1”开头.
否则效果很好...
输出量:
型