删除列表中的重复项
remove duplicate items in list
当前代码:
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 模板中渲染它)
您可以使用字典解决此问题,如下所示
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]
[ 的每个唯一值关联的列表中=15=]
相信您可以通过调整代码来获得您想要的输出格式
这段代码怎么样?
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'}]})
充分利用 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']})
您可以为此使用字典,将第一个元素添加为键。
然后将最后 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')]
当前代码:
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 模板中渲染它)
您可以使用字典解决此问题,如下所示
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]
[ 的每个唯一值关联的列表中=15=]
相信您可以通过调整代码来获得您想要的输出格式
这段代码怎么样?
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'}]})
充分利用 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']})
您可以为此使用字典,将第一个元素添加为键。 然后将最后 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')]