我正在使用Python 2.7.3,尝试根据另一个列表中的值的顺序对字典列表进行排序。
例如:
例如:
listOne = ['hazel', 'blue', 'green', 'brown']
listTwo = [{'name': 'Steve', 'eyecolor': 'hazel', 'height': '5 ft. 11 inches'},
{'name': 'Mark', 'eyecolor': 'brown', 'height': '6 ft. 2 inches'},
{'name': 'Mike', 'eyecolor': 'blue', 'height': '6 ft. 0 inches'},
{'name': 'Ryan', 'eyecolor': 'brown', 'height': '6 ft, 0 inches'},
{'name': 'Amy', 'eyecolor': 'green', 'height': '5 ft, 6 inches'}]
按照listOne中值的顺序排序listTwo,我们将得到以下结果:
print listTwo
[{'name': 'Steve', 'eyecolor': 'hazel', 'height': '5 ft. 11 inches'},
{'name': 'Mike', 'eyecolor': 'blue', 'height': '6 ft. 0 inches'},
{'name': 'Amy', 'eyecolor': 'green', 'height': '5 ft, 6 inches'},
{'name': 'Mark', 'eyecolor': 'brown', 'height': '6 ft. 2 inches'},
{'name': 'Ryan', 'eyecolor': 'brown', 'height': '6 ft, 0 inches'}]
最终我需要输出这段文本,我为了正确显示它(以正确的顺序)所做的是:
for x in xrange(len(listOne)):
for y in xrange(len(listTwo)):
if listOne[x] == listTwo[y]["eyecolor"]:
print "Name: " + str(listTwo[y]["name"]),
print "Eye Color: " + str(listTwo[y]["eyecolor"]),
print "Height: " + str(listTwo[y]["height"])
有没有一种lambda表达式可以用来实现这个目的?必须有一种更紧凑、更简单的方法来按照我想要的顺序得到它。
order_dict.get(x["eyecolor"], default)
即可。最合理的默认值可能是-1
(将未知值排序到开头)和float('inf')
(将它们排序到末尾)。删除值只需要稍微复杂一些。您需要在排序之前使用filter
(或等效的列表推导式)来过滤值。 - Blckknght