[英]What is wrong with this sorting of dictionary?
我正在尝试在这里对字典进行排序:
car = {
"brand": ["Ford","Honda","Toyota","Tesla","Ford"],
"model": ["Mustang","CRV","RAV4","X","Transit"],
"year": [1964,2010,2015,2022,1964],
"color": ["Red","Yellow","Green","Blue","Black"]
}
sortedbyval1={k: v for k, v in sorted(car.items(),key=lambda v:v[1])}
它不起作用,因为您有一堆汽车属性的字典,而不是汽车的集合。 这就是为什么当您使用
key=lambda v:v[1]<\/code>时,
sorted<\/code>会尝试比较包含不同类型的列表。
例如,“year”仅包含 int,但您想将其与包含字符串的“brand”进行比较,因此您会得到 TypeError。
您可以修改该字典以创建汽车列表。 假设相同的索引值对应于同一辆车,您可以遍历
zip<\/code> ped
car.values()<\/code>并使用 dict 构造函数创建一个字典列表,其中每个字典都是一辆车。
然后使用
list.sort<\/code> ,其中排序键是按型号、年份和颜色对汽车列表进行排序。
list_of_cars = [dict(zip(car.keys(), tpl)) for tpl in zip(*car.values())]
list_of_cars.sort(key=lambda car: (car['model'], car['year'], car['color']))
试试这个美:
car = {
"brand": [ "Ford", "Honda", "Toyota", "Tesla", "Ford" ],
"model": [ "Mustang", "CRV", "RAV4", "X", "Transit" ],
"year": [ 1964, 2010, 2015, 2022, 1964 ],
"color": [ "Red", "Yellow", "Green", "Blue", "Black" ]
}
criteria = "model";
sorted_dict = {
k: v for k, v in [
(a, [
car[a][b] for b in [
c for (c, _) in sorted(
zip(
[
c for c in range(0, len(car[criteria]) )
],
car[criteria]
),
key = lambda x: x[1]
)
]
]) for a in car.keys()
]
};
print(sorted_dict)
这不是您直接要求的,但是由于您正在学习 python,因此可能会提到在这种情况下使用类和面向对象编程的简洁方式:
class car():
def __init__(self, brand, model, year, color):
self.brand = brand
self.model = model
self.year = year
self.color = color
cars = [car("Ford", "Mustang", 1964, "Red"),
car("Honda", "CRV", 2010, "Yellow"),
car("Toyota", "RAV4", 2015, "Green"),
car("Tesla", "X", 2022, "Blue"),
car("Ford", "Transit", 1964, "Black")]
cars.sort(key=lambda c: c.year)
for c in cars:
print(c.year, c.model, c.brand)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.