Python3: Как из функции вывести список?
Я новичок и только разбираюсь, не могу сообразить как сделать вывод списка из функции. Есть большой вывод json, в котором есть список:
dataorg = {'ДопВидДеят': [
{'Код': '10.11', 'Текст': 'Переработка и консервирование мяса', 'Дата': '2017-06-29'},
{'Код': '10.12', 'Текст': 'Производство и консервирование мяса птицы', 'Дата': '2017-06-29'},
{'Код': '10.13.3', 'Текст': 'Производство мясных (мясосодержащих) консервов', 'Дата': '2017-06-29'}
]}
Мне нужно сделать функцию, вывод из которой будет:
- Переработка и консервирование мяса;
- Производство и консервирование мяса птицы;
- Производство мясных (мясосодержащих) консервов;
Пробовал так:
def okve():
for i in range (0, len(dataorg)):
ok = '- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';'
return(ok)
print(okve())
Но мне возвращается только:
- Переработка и консервирование мяса;
При этом вывод из функции мне нужен для использования в другой функции. Подскажите, какие есть варианты решения?
Ответы (2 шт):
Попробуйте так:
dataorg = {
'ДопВидДеят': [
{
'Код': '10.11',
'Текст': 'Переработка и консервирование мяса',
'Дата': '2017-06-29'
},
{
'Код': '10.12',
'Текст': 'Производство и консервирование мяса птицы',
'Дата': '2017-06-29'
},
{
'Код': '10.13.3',
'Текст': 'Производство мясных (мясосодержащих) консервов',
'Дата': '2017-06-29'
}
]
}
def okve():
for i in dataorg['ДопВидДеят']:
print(f" - {i['Текст']}")
okve()
Update
dataorg = {
'ДопВидДеят': [
{
'Код': '10.11',
'Текст': 'Переработка и консервирование мяса',
'Дата': '2017-06-29'
},
{
'Код': '10.12',
'Текст': 'Производство и консервирование мяса птицы',
'Дата': '2017-06-29'
},
{
'Код': '10.13.3',
'Текст': 'Производство мясных (мясосодержащих) консервов',
'Дата': '2017-06-29'
}
],
'ДопВидДеят222': [
{
'Код': '10.11',
'Текст': '222 Переработка и консервирование мяса',
'Дата': '2017-06-29'
},
{
'Код': '10.12',
'Текст': '222 Производство и консервирование мяса птицы',
'Дата': '2017-06-29'
},
{
'Код': '10.13.3',
'Текст': '222 Производство мясных (мясосодержащих) консервов',
'Дата': '2017-06-29'
}
]
}
def okve():
for i in dataorg:
for j in dataorg[i]:
print(f" - {j['Текст']}")
print()
okve()
return возвращает только то что в него передали, и завершает работу функции.
Нужно либо аккумулировать список внутри функции и вернуть полный список в конце:
def okve():
ok = []
for i in range (0, len(dataorg['ДопВидДеят'])):
ok.append('- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';')
return ok
print(okve())
Либо возвращать значения последовательно с помощью yield, превратив тем самым функцию в генератор (но чтобы получить список, нужно будет обернуть вызов функции в list):
def okve():
for i in range (0, len(dataorg['ДопВидДеят'])):
ok = '- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';'
yield ok
print(list(okve()))
Если нужно вывести не в виде списка (в квадратных скобках), а каждый элемент с новой строки, то можно объединить результат в цельную строку с помощью join:
print('\n'.join(okve()))
Или так:
print(*okve(), sep='\n')
Вообще, если вам нужно перебрать элементы списка, то range не нужно:
def okve():
ok = []
for item in dataorg['ДопВидДеят']:
ok.append('- ' + item['Текст'] + ';')
return ok
def okve():
for item in dataorg['ДопВидДеят']:
ok = '- ' + item['Текст'] + ';'
yield ok