печать нескольких значений для каждого ключа в словаре в новой строке, перед которой стоит ключ

#python #list

#python #Список

Вопрос:

В Python у меня есть два списка, ids gos и Оба имеют одинаковую длину (т. Е. Равное количество строк), но gos может содержать несколько элементов в строке (т. Е. Это Список списков), в то время как ids имеет только 1 элемент в строке

Например:

 ids =  ['1','2','3']
gos =  [['a','b','c'],['d', 'e'], ['f']]
 

Я хочу распечатать каждый идентификатор в ids столько раз, сколько элементов go в списке gos, за которыми следует один из соответствующих элементов из списка gos, и каждый раз в новой строке.

Я надеюсь, что это прояснит результат, который я ищу:

 '1'   'a'
'1'   'b'
'1'   'c'
'2'   'd'
'2'   'e'
'3'   'f'
 

Комментарии:

1. что у вас есть на данный момент?

Ответ №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
 

Ответ №2:

Вы можете попробовать эти простые вложенные циклы for:

 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 .

Ответ №3:

другой способ сделать это

 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]
 

Ответ №4:

Еще один способ сделать это..

 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)
 

Ответ №5:

Я надеюсь, что это простой способ сделать это

 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