#python #python-3.x #input #yaml #pyyaml
#python #python-3.x #входные данные #ямл #пиямл
Вопрос:
Я хочу получить данные из входных данных в формате yaml.Эти данные включают информацию о пользователе и информацию о музыкальных альбомах, которые приобрел каждый пользователь.Входная информация выглядит следующим образом:
2 # this line specify the number of users
- name: user1
age: 18
city: city1
albums:
- album1
- album2
- album3
- name: user2
age: 20
city: city2
albums:
- album2
- album1
- alubm3
3 # this line specify the number of albums
- name: album1
singer: singer1
genre: classic
tracks: 10
- name: album2
singer: singer2
genre: pop
tracks: 22
- name: album3
singer: singer3
genre: pop
tracks: 14
Для этого я написал следующий код
num_user = int(input())
users_data = {}
albums_data = {}
for i in range(num_user):
name, age, city = input().split()[-1], input().split()[-1], input().split()[-1]
input()
albums=[]
next_line = input()
while next_line.split()[0]=='-' and len(next_line)-len(next_line.lstrip(' '))==4:
albums.append(next_line.split()[-1])
next_line = input()
if len(next_line.split()) < 2:
num_albums = int(next_line)
users_data[name]=[age, city, albums]
for i in range(num_albums):
name, singer, genre, tracks = input().split()[-1],input().split()[-1],
input().split()[-1], input().split()[-1]
albums_data[name]=[singer, genre, tracks]
Все в порядке, пока количество пользователей не превысит одного человека, и у меня возникают проблемы с сохранением информации о втором пользователе в словаре, и вся информация о перемещении сохраняется.
Я хочу этого:
{'user1': ['18', 'city1', ['album1', 'album2', 'album3']], 'user2': ['20', 'city2', ['album2', 'album1', 'alubm3']]} {'album1': ['singer1', 'classic', '10'], 'album2': ['beeptunes', 'pop', '22'], 'tekunbede': ['beeptunes', 'pop', '14']}
но пойми это:
{'user1': ['18', 'city1', ['album1', 'album2', 'album3']], '20': ['city2', 'albums:', ['album1', 'alubm3']]} {'album1': ['singer1', 'classic', '10'], 'album2': ['beeptunes', 'pop', '22'], 'tekunbede': ['beeptunes', 'pop', '14']}
Комментарии:
1. Почему «без использования библиотеки pyyaml»? Правильный синтаксический анализатор, будь то PyYAML или ruamel. yaml или что-то еще — это правильное решение.
2. Потому что это практический вопрос, и его попросили не использовать библиотеку в решении @Chris
Ответ №1:
Проблема, похоже, заключается в том, что после обработки последнего альбома для первого пользователя вы снова вызываете input(), который получает имя. Отделение ввода от обработки поможет устранить проблему, поэтому посмотрите на создание функции для обработки имени после его обнаружения.
так что попробуйте:
- прочитайте ввод
- определите, что делать на основе ввода
- обработайте прочитанные данные
num_user = int(input())
users_data = {}
albums_data = {}
for i in range(num_user):
name, age, city = input().split()[-1], input().split()[-1], input().split()[-1]
input()
albums=[]
next_line = input()
while next_line.split()[0]=='-' and len(next_line)-len(next_line.lstrip(' '))==4:
albums.append(next_line.split()[-1])
next_line = input() # This is the line with the issue
if len(next_line.split()) < 2:
num_albums = int(next_line)
users_data[name]=[age, city, albums]
for i in range(num_albums):
name, singer, genre, tracks = input().split()[-1],input().split()[-1],
input().split()[-1], input().split()[-1]
albums_data[name]=[singer, genre, tracks]