对元组列表进行排序
我有一个包含元组的列表,元组的格式是(a,b,c,d),我想把那些'a'的值是唯一的元组复制到一个新的列表里。我对Python还很陌生。
我现在的想法是这样,但没有成功:
for (x) in list:
a,b,c,d=(x)
if list.count(a)==1:
newlist.append(x)
4 个回答
2
values = {}
for t in tups:
a,b,c,d = t
if a not in values:
values[a] = (1, t)
else:
count, tup = values[a]
values[a] = (count+1, t)
unique_tups = map(lambda v: v[1],
filter(lambda k: k[0] == 1, values.values()))
我使用一个字典来存储 a
的值以及与这个 a
值相关的元组。字典中每个键对应的值是一个元组 (count, tuple)
,其中 count
表示这个 a
值出现的次数。
最后,我会从 values
字典中过滤出那些 只有 当 count
为 1 的 a
值,也就是它们是独一无二的。然后我会把这个列表映射,返回那些元组,因为此时 count
的值肯定是 1。
现在,unique_tups
是一个包含所有独特 a
值的元组的列表。
在收到评论者的反馈后进行了更新,谢谢大家!
2
你可以使用一个集合来记录重复的项:
seen_a = set()
for x in list:
a, b, c, d = x
if a not in seen_a:
newlist.append(x)
seen_a.add(x)
3
如果你不想添加那些有重复a
值的元组(也就是说,你只想添加第一次出现的某个a
,而不想添加后面出现的重复a
):
seen = {}
for x in your_list:
a,b,c,d = x
seen.setdefault(a, []).append(x)
newlist = []
for a,x_vals in seen.iteritems():
if len(x_vals) == 1:
newlist.append(x_vals[0])