@srnsdlmtn

Как вывести случайный элемент массива JSON с помощью Python?

Уже битый час бьюсь над одной задачей, гуглил по русски, гуглил по английски, документацию читал
Нужно пройтись по объекту json вида:
{
	"items": [{
		"name": "Первый",
		"ingredients": "Первое",
		"cookWay": "Первые"
	}, {
		"name": "Второй",
		"ingredients": "Второе",
		"cookWay": "Вторые"
	}, {
		"name": "Третий",
		"ingredients": "Третье",
		"cookWay": "Третьи"
	}]
}


Делаю это ясное дело циклом for, в начале прочитав файл, а потом перебирая всё что в нём есть:
recipes = open('items.json', 'r')
parsed_recipes = json.load(recipes)

def rand_item():
    for element in parsed_recipes["items"]:
        name = element['name']
        ingredients = element['ingredients']
        howto = element['cookWay']
    ready_recipe = name + ingredients + howto
    ready = random.choice(ready_recipe)
    return ready


Но таким образом он возвращает не случайный элемент, который должен получится после сложения трёх переменных, а случайную букву из этого элемента
Как сделать так, чтобы он выводил именно случайный элемент из этого массива в файле json, а не букву?
  • Вопрос задан
  • 1675 просмотров
Решения вопроса 3
@YaroslavS
Очевидно, что сначала надо взять рандомный элемент, а потом получить значения его полей
def rand_item():    
    random_recipe =  random.choice(parsed_recipes["items"])
    name = random_recipe['name']
    ingredients = random_recipe['ingredients']
    howto = random_recipe['cookWay']
    ready_recipe = name + ingredients + howto
    return ready_recipe
Ответ написан
@deliro
Ты складываешь 3 строки и выполняешь choice над результатом. Чего ты ожидаешь? Конечно это будет случайная буква.

Если сегодня Ванга во мне преобладает, то то, что ты хочешь делается примерно так:
recipes = open('items.json', 'r')
parsed_recipes = json.load(recipes)

def rand_item():
    return random.choice(parsed_recipes["items"])
Ответ написан
Комментировать
sim3x
@sim3x
with open('f.json') as f:
    d = json.loads(f.read())
    l = []
    # l = [y for x in d['items'] for y in x.values()]
    for x in d['items']:
        l += x.values()

random.choice(l)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы