我一直在寻找答案,但是似乎找不到任何能做到这一点的优雅或蟒蛇般的东西。
基本上,如果我有一个列表:
A = [[“ 1a”,“ ab”],[“ 2b”,“ cd”],[“ 1a”,“ ef”]]
我想标识出在其第一个索引中具有相同值的每个项目,如果是这种情况,请修改列表,以使A变为:
A = [[[“ 1a”,[“ ab”,“ ef”]],[“ 2b”,“ cd”]]
因为排序很重要,所以我试图避免使用字典。
答案 0 :(得分:0)
尝试zip
+ list comprehension
+产品+ for循环+索引(甚至适用于以下列表):
from itertools import product
A = [["1a", "ab"], ["2b", "cd"], ["1a", "ef"], ['2b','gh']]
l,_=zip(*A)
l2=[idx for idx,i in enumerate(l) if l.count(i)>1]
l3=list(set([tuple(sorted((x,y))) for x,y in product(l2,repeat=2) if l[x]==l[y] and x!=y]))
for x,y in l3:
A[x][1]=[A[x][1],A[y][1]]
A.pop(y)
print(A)
输出:
[['1a', ['ab', 'ef']], ['2b', ['cd', 'gh']]]