我有一些记录如下:
list1= [['corner grant and main reef road, new state area, springs', 'springs'],
['corner grant and main reef road, new state area, springs', 'palm springs'],
['corner grant and main reef road, new state area, springs', 'edenvale']]
Run Code Online (Sandbox Code Playgroud)
我希望我的记录看起来像这样:
list2= ['corner grant and main reef road, new state area, springs', 'springs | palm springs | edenvale']
Run Code Online (Sandbox Code Playgroud)
我编写了以下代码来完成此任务:
for i in range(len(list1)-1):
if list1[i][0] == list1[i+1][0]:
list2.append([list1[i][0], list1[i][1] + "|" + list1[i + 1][1]])
else:
pass
Run Code Online (Sandbox Code Playgroud)
如果我在列表中有两个元素并且是连续的条目,则它会起作用,但如果有超过2个项目且不连续,则会失败.任何人都可以指出一个合适的方法来实现这一目标.
您可以使用a dict进行分组.
为了方便起见,这defaultdict是一个很好的子类dict:
from collections import defaultdict
list1= [['corner grant and main reef road, new state area, springs', 'springs'],
['corner grant and main reef road, new state area, springs', 'palm springs'],
['corner grant and main reef road, new state area, springs', 'edenvale']]
def grouping(l):
d = defaultdict(list)
for key,value in l:
d[key].append(value)
for key in d:
d[key] = ' | '.join(d[key])
return list(d.items())
list2 = grouping(list1)
print(list2)
Run Code Online (Sandbox Code Playgroud)
输出:
[('corner grant and main reef road, new state area, springs', 'springs | palm springs | edenvale')]
Run Code Online (Sandbox Code Playgroud)
测试:
list3= [['corner grant and main reef road, new state area, springs', 'springs'],
['corner grant and main reef road, new state area, springs', 'palm springs'],
['corner grant and main reef road, new state area, springs', 'edenvale'],
['testing 1243','hi'],
['corner grant and main reef road, new state area, springs', '123456'],
]
print(grouping(list3)
Run Code Online (Sandbox Code Playgroud)
输出:
[('corner grant and main reef road, new state area, springs', 'springs | palm springs | edenvale | 123456'), ('testing 1243', 'hi')]
Run Code Online (Sandbox Code Playgroud)
如果您需要保留订单,请OrderedDict改用:
from collections import OrderedDict
def grouping(l):
d = OrderedDict()
for key,value in l:
d.setdefault(key, []).append(value)
for key in d:
d[key] = ' | '.join(d[key])
return list(d.items())
Run Code Online (Sandbox Code Playgroud)