Python 按公共值对两个包含相同值的不同列表进行排序
我必须列出如下所示的列表:Python 按公共值对两个包含相同值的不同列表进行排序,python,Python,我必须列出如下所示的列表: list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]] list2 = [ ["name2", 1], ["name1", -1], ["name3", 0]] 列表包含介于0和20之间的名称 两个列表中的名称完全相同,但整数值不同 是否可以对列表2进行排序,使名称的顺序与列表1中的顺序相同 名称的顺序各不相同,因此它必须是一种灵活的解决方案,可以对名称进行排序,无论它们放在列表2中的什么位置 我希望输出如下所
list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]]
list2 = [ ["name2", 1], ["name1", -1], ["name3", 0]]
列表包含介于0
和20
之间的名称
两个列表中的名称完全相同,但整数值不同
是否可以对列表2进行排序,使名称的顺序与列表1中的顺序相同
名称的顺序各不相同,因此它必须是一种灵活的解决方案,可以对名称进行排序,无论它们放在列表2中的什么位置
我希望输出如下所示:
list1=[[“name1”,100],“name2”,33],“name3”,22]
list2=[[“name1”,-1],“name2”,1],“name3”,0]
创建一个新列表,其顺序与仅包含名称的list2
相同。然后,您可以根据该名称列表中每个列表(名称)索引中的第一个元素对列表1
进行排序:
names = [l[0] for l in list1]
list2.sort(key=lambda l: names.index(l[0]))
#[['name1', -1], ['name2', 1], ['name3', 0]]
创建一个新列表,其顺序与仅包含名称的list2
相同。然后,您可以根据该名称列表中每个列表(名称)索引中的第一个元素对列表1
进行排序:
names = [l[0] for l in list1]
list2.sort(key=lambda l: names.index(l[0]))
#[['name1', -1], ['name2', 1], ['name3', 0]]
一个在O(n)
时间内工作的稍微更优化的解决方案-它从列表2中创建一个dict,这样就可以避免.index
,将复杂性从O(n**2)
提高到O(n)
:
一个在O(n)
时间内工作的稍微更优化的解决方案-它从列表2中创建一个dict,这样就可以避免.index
,将复杂性从O(n**2)
提高到O(n)
:
如果这些字符串是字符串,请引用它们,否则请使用name1\u int
等。实际上是int。。。如果您能提供所需的输出,谢谢。如果这些字符串是字符串,请引用它们,否则请使用name1\u int
等。实际上,int。。。如果您能够提供所需的输出,thanksIt将非常有用。这只会按单个索引进行排序。我需要它索引两次,因为列表中有一个列表。这有可能吗?@Barmar我已经纠正了ans,很抱歉!ValueError:['name1',100]不在列表中我在运行code@JoeIddon它只需要按名称排序,而不是按整体排序list@FlugtN确保准确复制列表定义和代码(最近已更新)。我刚刚测试了它,它是有效的。它只按单个索引进行排序。我需要它索引两次,因为列表中有一个列表。这有可能吗?@Barmar我已经纠正了ans,很抱歉!ValueError:['name1',100]不在列表中我在运行code@JoeIddon它只需要按名称排序,而不是按整体排序list@FlugtN确保准确复制列表定义和代码(最近已更新)。我刚刚测试过,它可以工作。