I have an initial dict named grouped_items and i need to populate it via
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
Result 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_"
]
}
Target: I want to reorder the grouped_items following the order of group_items and not of separator
grouped_items =
{
"tcp_permit": [
"_7_tcp_permit_bgp"
],
"icmp_permit": [
"_8_icmp_permit_"
],
"udp_permit": [
"_9_udp_permit_domain"
],
"ip_permit": [
"_10_ip_permit_"
]
}
I try to use the
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')))}
But still no success. Is there any chance to reorder the dict based on value and not voa key? Python 3.11.3
The problem is that "_10_ip_permit" will be sorted before "_7_tcp_permit_bgp" because the string starts with "1"...
Else it works well...
Output :