删除列表中的重复项

时间:2016-12-05 13:23:36

标签: python python-3.x pyramid mako

当前代码:

mylist = [('x', 'Value1', 'Value2'), ('x', 'Value3', 'Value4')]

for item in mylist:
   item[0], item[1], item[2]

当前的循环输出:

x, Value1 : Value2, 
x, Value3 : Value4

想要输出:

x, "Value1 : Value2, Value3 : Value4"

(那些是我自己渲染的字符串冒号)

这样做的最佳和正确方法是什么?

(我在.mako模板中渲染)

4 个答案:

答案 0 :(得分:2)

您可以使用以下字典解决此问题

mylist = [('x', 'Value1', 'Value2'), ('x', 'Value3', 'Value4')]

d = {}

for item in mylist:
    x = item[0]
    if x in d:
        d[x].append((item[1], item[2]))
    else:
        d[x] = [(item[1], item[2])]

 for key in d:
    print key, d[key]

字典d使我们能够将所有重复出现的item[0]聚合在一起,并将元组(item[1], item[2])添加到与item[0]

我相信您可以调整代码以获得所需的输出格式

答案 1 :(得分:2)

您可以使用词典,添加第一个元素作为键。 然后将最后2个项目添加为内部字典作为键和值。

mylist = [('x', 'Value1', 'Value2'), ('x', 'Value3', 'Value4'), ('y', 'vvvv', 'mmmm')]

d = {}

for item in mylist:
   d.setdefault(item[0], "")
   d[item[0]] += ", " if len(d[item[0]]) else ""
   d[item[0]] += "{}: {}".format(item[1], item[2])

result = []
for k, v in d.items():
    t = [k]
    t.append(v)
    result.append(tuple(t))

print(result)

它已经为您提供了所需的输出:

  

[(' y',' vvvv:mmmm'),(' x',' Value1:Value2,Value3:Value4' )]

答案 2 :(得分:0)

这段代码怎么样?

from collections import defaultdict

mylist = [('x', 'Value1', 'Value2'), ('x', 'Value3', 'Value4'), ('x2', 'value5', 'value6')]
result = defaultdict(list)
for item1, item2, item3 in mylist:
    result[item1].append({item2:item3})

print(result)

输出

defaultdict(<class 'list'>, {'x': [{'Value1': 'Value2'}, {'Value3': 'Value4'}], 'x2': [{'value5': 'value6'}]})

答案 3 :(得分:0)

利用collections.defaultdict!

import collections
mylist = [('x', 'Value1', 'Value2'), ('x', 'Value3', 'Value4')]
answer = collections.defaultdict(list)
for group in mylist:
    key = group[0]
    rest = group[1:]
    values = [x for x in rest]
    answer[key] += values

# Output
# In [5]: answer
# Out[5]: defaultdict(list, {'x': ['Value1', 'Value2', 'Value3', 'Value4']})