排序元组列表

时间:2010-07-15 19:21:58

标签: python sorting list tuples

我有一个表单(a,b,c,d)的元组列表,我想只将那些具有唯一值'a'的元组复制到一个新列表中。我对python很新。

当前的想法不起作用:

for (x) in list:
   a,b,c,d=(x)
   if list.count(a)==1:
      newlist.append(x)

4 个答案:

答案 0 :(得分:3)

如果您想要添加任何具有重复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])

答案 1 :(得分: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)的元组,其中counta被查看的次数。

最后,我过滤了values字典那些a为1的count值,它们很独特。然后我映射该列表以仅返回那些元组,因为count值将为1。

现在,unique_tups是包含唯一a个元组的所有元组的列表。

收到评论者的反馈后更新,谢谢!

答案 2 :(得分: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 :(得分:0)

你确实可以对列表进行排序然后迭代它:

xs = [(1,2,3,4), (5, 2, 3, 4), (2, 3, 3, 3), (1, 5, 2, 3)]
newList = []
xs.sort()
lastX = None
for x in xs:
  if lastX:
    if lastX[0] == x[0]:
      lastX = None
    else:
      newList.append(lastX)
      lastX = x
if lastX:
  newList.append(lastX)