Разбор текста в словаре и разделение на ключи и значения

#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'}