use*_*027 1 python sorting dictionary list
我有一个这种结构的字典:
{
"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"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过名称为'汽车制造商'的标签值对该字典进行排序,以得到这样的结果:
{
"Volvo":
{
[
"Mark":{...},...
]
},
"Daewoo":
{
["John":{...}]
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让它尽可能优雅?我可以通过制作几个嵌套循环(下面的例子)来做到这一点,但它看起来很难看,可能效率不高.
cars = {}
for person in persons:
for tag in person['tags']:
if tag['name'] == 'Car manufacturer'
cars[tag['value']].append(item)
Run Code Online (Sandbox Code Playgroud)
老实说,您的起始数据结构设计非常糟糕.它可能会小规模地工作,但随着你的进步和你的"字典"项目变得越来越大,你已经可以看到它快速结束了.尝试改为创建一个类,并创建结构的不同实例.例如:
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
Run Code Online (Sandbox Code Playgroud)
从这里你可以创建实例,你将能够更容易地跟踪它们.您甚至可以将这些单独的实例添加到字典本身,然后您可以对它们进行排序.
EX:
Mark = Employees()
Mark.surname = 'Johnson'
Mark.salary = 5
Mark.car_man = 'Volvo'
John = Employees()
John.surname = "Doe"
John.salary = 10
John.car_man = Daewoo
Run Code Online (Sandbox Code Playgroud)
根据需要为这些实例添加这些实例,然后您可以将这些实例添加到字典中,并且能够更轻松地对它们进行排序.
将它们添加到字典就像这样简单:
my_dict = {}
my_dict[#key] = # your instance
Run Code Online (Sandbox Code Playgroud)