在字典中按新行打印每个键的多个值,并以键为前缀
在Python中,我有两个列表,ids
和gos
,它们的长度是一样的,也就是说行数相同。但是,gos
每一行可以有多个元素(也就是它是一个列表的列表),而ids
每一行只有一个元素。
举个例子:
ids = ['1','2','3']
gos = [['a','b','c'],['d', 'e'], ['f']]
我想把ids
中的每个id打印出来,打印的次数要和gos
列表中对应行的元素数量一样,并且每次打印后面跟着gos
列表中的一个对应元素,每次都要换行。
我希望这样能让你明白我想要的输出是什么:
'1' 'a'
'1' 'b'
'1' 'c'
'2' 'd'
'2' 'e'
'3' 'f'
5 个回答
0
我希望这是一种简单的方法来做到这一点
for i in range(len(gos)):
for k in gos[i]:
print ids[i], k
输出结果
1 a
1 b
1 c
2 d
2 e
3 f
0
还有另一种方法可以做到这一点..
ids = "1 2 3".split()
gos = ['a b c'.split(), 'c d'.split(), ['f']]
import itertools
ig = [zip([i] * len(g), g)
for i, g in zip(ids, gos)]
for i, g in itertools.chain.from_iterable(ig):
print(i, g)
0
还有一种方法可以做到这一点
from itertools import product,imap
ids = ['1','2','3']
gos = [['a','b','c'],['d', 'e'], ['f']]
for i in imap(product,ids,gos):
for j in i:
print j[0],j[1]
0
你可以试试这些简单的嵌套循环:
for i, e1 in enumerate(ids):
for e2 in gos[i]:
print e1, e2
输出结果:
1 a
1 b
1 c
2 d
2 e
3 f
注意:这里用到的enumerate
函数是用来记录索引的,这个索引可以用来访问gos
中的对应元素。
1
使用zip函数:
for i,g in zip(ids, gos):
for ge in g:
print i,ge
输出结果:
1 a
1 b
1 c
2 d
2 e
3 f