#python #syntax #nested #generator #bioinformatics
#питон #синтаксис #вложенный #генератор #биоинформатика
Вопрос:
Я пытаюсь преобразовать этот вложенный цикл for:
for k,v in all_R.iteritems():
for pairs in v:
print pairs[1]
для однострочника, что-то вроде этого:
print ([pairs[1] for pairs in v for k,v in all_R.iteritems()])
Но я получаю эту ошибку:
UnboundLocalError: local variable 'v' referenced before assignment
all_R — это defaultdict, где каждое значение имеет ключи, которые являются парами, и меня интересует только одно значение из этой пары:
{'1-0002': [('A-75G', 'dnaN'), ('I245T', 'recF'),... ], '1-0004': [('A-75G', 'dnaN'), ('L161', 'dnaN'),...]}
Ответ №1:
Описания списков записываются в том же порядке, что и для циклов, поэтому вы на самом деле ищете (обратите внимание, что порядок обратный)
([pairs[1] for k,v in all_R.iteritems() for pairs in v ])
Вот разбивка, которая показывает структуру немного более четко:
[
pairs[1]
for k,v in all_R.iteritems()
for pairs in v
]
Если вы хотите использовать генераторы, как предполагает ваш заголовок, вы можете использовать круглые скобки вместо скобок.
(pairs[1] for k,v in all_R.iteritems() for pairs in v)
Это создаст генератор с вашими желаемыми свойствами.