在字典中按新行打印每个键的多个值,并以键为前缀

0 投票
5 回答
1733 浏览
提问于 2025-04-18 10:51

在Python中,我有两个列表,idsgos,它们的长度是一样的,也就是说行数相同。但是,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

撰写回答