#python
Вопрос:
Я хочу разобрать некоторый текст в словаре, например, я хочу текст с двоеточиями слева и справа без двоеточий. Так что я могу иметь те, у которых есть двоеточия, как key
и те, у которых нет as values
.
Вот данные:
x={0: {0: 'Name in home country:n Kylian Mbappé Lottinn Date of birth:n Dec 20, 1998 n Place of birth:n n Parisxa0xa0 n Age:n 22n Height:n 1,78xa0mn Citizenship:n n xa0xa0France n Position:n n attack - Centre-Forward n Foot:n rightn Player agent:n n Relatives n n Current club:n n n Paris Saint-Germain n Joined:n n Jul 1, 2018 n Contract expires:n Jun 30, 2022n Outfitter:n Niken n Social-Media:'}}
Затем преобразуйте в фрейм данных pandas:
x = pd.DataFrame(x)
Попытки, которые я пробовал:
x[0][0].replace('n', '').split("/")[0]
Который удаляет пробелы, но я не могу выбрать конкретный текст, и там много пробелов.
Я также пробовал:
x[0][0].replace('n', ',').split(',')
Это работает намного лучше, поскольку я действительно могу индексировать то, что хотел, однако, потому Date of birth
что имеет запятую, тогда я получаю разделенные даты, но я бы предпочел иметь один. Но также я получаю много пустых индексированных значений, в которых есть только пробел и запятая.
например:
data = {}
for j in range(0, len(x[0][0].replace('n', ',').split(','))):
for i in x[0]:
print(i.replace('n', ',').split(',')[j])
Хотя я не уверен, как настроить это, чтобы получить ожидаемый результат, как показано ниже, из-за разных размеров разделения.
Ожидаемый результат:
{'Name in home country:':["Kylian Mbappé Lottin"],
'Date of birth:':["Dec 20, 1998"],
'Place of birth:':["Parisxa0xa0"]
...
...
}
Комментарии:
1. пожалуйста, сначала отформатируйте свои данные.
2. @DeanVanGreunen что вы имеете в виду>?
3. Возможно, вас заинтересует
strip()
.4. очистите «данные» в этом вопросе.
Ответ №1:
Вы можете использовать re.split для форматирования ваших данных, а затем использовать zip для создания словаря:
import re
x={0: {0: 'Name in home country:n Kylian Mbappé Lottinn Date of birth:n Dec 20, 1998 n Place of birth:n n Parisxa0xa0 n Age:n 22n Height:n 1,78xa0mn Citizenship:n n xa0xa0France n Position:n n attack - Centre-Forward n Foot:n rightn Player agent:n n Relatives n n Current club:n n n Paris Saint-Germain n Joined:n n Jul 1, 2018 n Contract expires:n Jun 30, 2022n Outfitter:n Niken n Social-Media:'}}
kv = re.split(r':?s*ns*', x[0][0])
print(dict(zip(kv[::2], kv[1::2])))
Вывод:
{'Name in home country': 'Kylian Mbappé Lottin', 'Date of birth': 'Dec 20, 1998', 'Place of birth': 'Paris', 'Age': '22', 'Height': '1,78xa0m', 'Citizenship': 'France', 'Position': 'attack - Centre-Forward', 'Foot': 'right', 'Player agent': 'Relatives', 'Current club': 'Paris Saint-Germain', 'Joined': 'Jul 1, 2018', 'Contract expires': 'Jun 30, 2022', 'Outfitter': 'Nike'}