我有一个像下面那样的二维列表
original_list = [['2', 'Out', 'Words', 'Test3', '21702-1201', 'US', 41829.0, 'VN', 'Post', 'NAI'],
['Test', 'Info', 'More Info', 'Stuff', '63123-7802', 'US', 40942.0, 'CM', 'User Info', 'VAI'],
['Test1', 'Info1', 'More Info1', 'Stuff1', '63123-7802', 'US', 40942.0, 'CM', 'User Info1', 'VAI'],
['1', 'Information', 'Things', 'NE', '68064-9782', 'US', 40106.0, 'DRH', 'Another User', 'NAI'],]
我已经按邮政编码对列表进行了排序。现在我想通过邮政编码将列表拆分为第5个元素,并将邮政编码分组到相同的新列表中。我还想通过前5个邮政编码对它们进行排序,忽略最后一个。我怎么能这样做?我试图使用zip功能,但我无法将它组合在一起。
编辑:
所需的输出看起来像这样。
new_list1 = ['2', 'Out', 'Words', 'Test3', '21702-1201', 'US', 41829.0, 'VN', 'Post', 'NAI']
new_list2 = ['Test', 'Info', 'More Info', 'Stuff', '63123-7802', 'US', 40942.0, 'CM', 'User Info', 'VAI'],
['Test1', 'Info1', 'More Info1', 'Stuff1', '63123-7802', 'US', 40942.0, 'CM', 'User Info1', 'VAI']
new_list3 = ['1', 'Information', 'Things', 'NE', '68064-9782', 'US', 40106.0, 'DRH', 'Another User', 'NAI']
关于问题的第二部分。如果我有两个包含拉链的列表,其中前5个数字相同,但最后4个不同,它会将这些组合在一起。例如,如果以上两个邮政编码是63123-7802和63123-8956,则这些邮政编码将组合在一起。
答案 0 :(得分:2)
您可以使用itertools.groupby
>>> from itertools import groupby
>>> l = [['2', 'Out', 'Words', 'Test3', '21702-1201', 'US', 41829.0, 'VN', 'Post', 'NAI'],
... ['Test', 'Info', 'More Info', 'Stuff', '63123-7802', 'US', 40942.0, 'CM', 'User Info', 'VAI'],
... ['Test1', 'Info1', 'More Info1', 'Stuff1', '63123-7802', 'US', 40942.0, 'CM', 'User Info1', 'VAI'],
... ['1', 'Information', 'Things', 'NE', '68064-9782', 'US', 40106.0, 'DRH', 'Another User', 'NAI'],]
>>> zip_retriever = lambda sub_l: sub_l[4].split('-')[0] # Grab the part leading up to '-' in the zip code
>>> for zip_code, vals in groupby(l, zip_retriever):
... print zip_code, list(vals)
...
21702 [['2', 'Out', 'Words', 'Test3', '21702-1201', 'US', 41829.0, 'VN', 'Post', 'NAI']]
63123 [['Test', 'Info', 'More Info', 'Stuff', '63123-7802', 'US', 40942.0, 'CM', 'User Info', 'VAI'], ['Test1', 'Info1', 'More Info1', 'Stuff1', '63123-7802', 'US', 40942.0, 'CM', 'User Info1', 'VAI']]
68064 [['1', 'Information', 'Things', 'NE', '68064-9782', 'US', 40106.0, 'DRH', 'Another User', 'NAI']]
>>>