Skip to main content
 首页 » 编程设计

python之如何按位于字典深处的键对复杂字典进行排序

2025年05月04日15落叶

我有一个具有这种结构的字典:

{ 
  "Mark": 
  { 
    "surname":"Johnson", 
    "tags": 
    [ 
      { 
        "name":"Salary", 
        "value":"5" 
      }, 
      { 
        "name":"Car manufacturer", 
        "value":"Volvo" 
      } 
    ] 
  }, 
  "John": 
  { 
    "surname":"Doe", 
    "tags": 
    [ 
      { 
        "name":"Salary", 
        "value":"10" 
      }, 
      { 
        "name":"Car manufacturer", 
        "value":"Daewoo" 
      } 
    ] 
  } 
} 

我想按名称为“汽车制造商”的标签的值对该字典进行排序,以获得如下内容:

{ 
  "Volvo":  
  { 
    [ 
     "Mark":{...},... 
    ] 
  }, 
  "Daewoo": 
  { 
    ["John":{...}] 
  } 
} 

有没有办法让它尽可能优雅?我可以通过制作几个嵌套循环(下面的示例)来做到这一点,但它看起来很难看,而且可能效率不高。

cars = {} 
for person in persons: 
  for tag in person['tags']: 
    if tag['name'] == 'Car manufacturer' 
      cars[tag['value']].append(item) 

请您参考如下方法:

老实说,您的起始数据结构设计得很糟糕。它可能适用于小规模,但随着你的进步和你的项目“字典”变大,你已经可以看到它很快就会变得难以抗拒。尝试创建一个类,并创建结构的不同实例。例如:

class Employees(): 
    def __init__(self): 
        self.surname = '' 
        self.salary = 0 
        self.car_man = []  # if in case you want to add more than one car use a list type or just use string if you plan on keeping this a single value 

从这里您可以创建实例,并且可以更轻松地跟踪它们。您甚至可以将这些单独的实例添加到字典本身,然后对它们进行排序。

例如:

 Mark = Employees() 
 Mark.surname = 'Johnson' 
 Mark.salary = 5 
 Mark.car_man = 'Volvo' 
 
 John = Employees() 
 John.surname = "Doe" 
 John.salary = 10 
 John.car_man = Daewoo 

对尽可能多的实例执行这些操作,然后您可以将这些实例添加到字典中并能够更轻松地对它们进行排序。

将它们添加到字典中非常简单:

my_dict = {} 
my_dict[#key] = # your instance