根据另一个lis值的顺序对字典列表进行排序

2024-04-25 13:39:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.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中值的顺序对list2进行排序,我们将得到以下结果:

^{pr2}$

我最终需要输出此文本,因此我所做的正确显示(以正确的顺序)如下:

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表达式可以用来实现这一点?必须有一种更紧凑、更不复杂的方法来让它按我想要的顺序排列。在


Tags: name列表排序顺序blueprintheightft
1条回答
网友
1楼 · 发布于 2024-04-25 13:39:25

最简单的方法是使用list.index为字典列表生成排序值:

listTwo.sort(key=lambda x: listOne.index(x["eyecolor"]))

但是这有点低效,因为list.index在眼睛颜色列表中进行线性搜索。如果你有很多眼睛颜色要检查,它会很慢。更好的方法是构建索引字典:

^{pr2}$

如果不想修改listTwo,可以使用内置的sorted函数,而不是list.sort方法。它返回列表的已排序副本,而不是就地排序。在

相关问题 更多 >