为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中将嵌套列表排序为具有唯一值的单独列表?

如何在python中将嵌套列表排序为具有唯一值的单独列表?

繁华开满天机 2021-03-18 14:13:59
我有两个变量:unique_val = [1,2,3]nested_list = [['name1',1],['name2',1],['name3',3],['name4',2],['name5',2],['name6',3]]基本上,我希望每个唯一值都有单独的名称列表。我努力拼凑了一组嵌套的for循环,但无济于事。理想情况下,输出将是这样的:list_1 = ['name1','name2']list_2 = ['name4','name5']list_3 = ['name3',name6']
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

为其中的每个项目创建变量unique_val不是一个好主意。与其进行硬编码,不如将所有字典更好地与键配合使用,list_1因为它可以处理任意数量的变量。


>>> from collections import defaultdict

>>> dic = defaultdict(list)

>>> nested_list = [['name1',1],['name2',1],['name3',3],['name4',2],['name5',2],['name6',3]]

>>> unique_val = [1,2,3]     #better make this a set to get O(1) lookup

>>> for v,k in nested_list:

        if k in unique_val:

            dic['list_'+str(k)].append(v)


#now access those lists:


>>> dic['list_1']

['name1', 'name2']

>>> dic['list_2']

['name4', 'name5']

>>> dic['list_3']

['name3', 'name6']

如果您有一个4,unique_val 那么您可能希望list_4成为一个空列表,这很容易由来处理defaultdict:


>>> dic['list_4']

[]


查看完整回答
反对 回复 2021-03-29
?
临摹微笑

TA贡献1982条经验 获得超2个赞

您可以使用列表理解:


[[name for name, number in nested_list if number == n] for n in unique_val]

如果您确实要将其放在单独的变量中,则可以执行以下操作。


list_1, list_2, list_3 = [[name for name, number in nested_list if number == n] for n in unique_val]


查看完整回答
反对 回复 2021-03-29
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信