<p>你的问题并不完全清楚确切的问题是什么。由于您作为示例提供的数据是一致且有序的,因此只需将列表中的项目拆分并进行分类,即可轻松解决此问题</p>
<pre><code>loc_list = ["LONDON-UK-L16-N1", "LONDON-UK-L17-N1", "LONDON-UK-L16-N2",
"LONDON-UK-L16-N2", "PARIS-France-L16-N2"]
split_loc_list = [location.split("-") for location in loc_list]
locs = {}
for loc in split_loc_list:
locs.setdefault("-".join(loc[0:2]), {}).\
setdefault("L", set()).add(loc[2].strip("L"))
locs.setdefault("-".join(loc[0:2]), {}).\
setdefault("N", set()).add(loc[3].strip("N"))
for loc, vals in locs.items():
L_vals_sorted = sorted(list(map(int,vals["L"])))
L_vals_joined = "|".join(map(str,L_vals_sorted))
N_vals_sorted = sorted(list(map(int,vals["N"])))
N_vals_joined = "|".join(map(str,N_vals_sorted))
print(f"{loc}-L({L_vals_joined})-N({N_vals_joined})")
</code></pre>
<p>将输出:</p>
<pre><code>LONDON-UK-L(16|17)-N(1|2)
PARIS-France-L(16)-N(2)
</code></pre>
<p>因为这里只有两个标记(“L”和“N”),所以我只是将它们写入代码中。如果可能有许多标签,则您可以使用以下方法按任意字母进行剥离:</p>
<pre><code>import re
split = re.findall('\d+|\D+', loc[2])
key, val = split[0], split[1]
locs.setdefault("-".join(loc[0:2]), {}).\
setdefault(key, set()).add(val)
</code></pre>
<p>然后遍历所有标记,而不是在第二个循环中仅获取“L”和“N”</p>