当前代码:
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模板中渲染)
答案 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']})