Как сделать под-словарь из данных строки текстового файла? - PullRequest
0 голосов
/ 11 января 2020

У меня есть .txt файл, который необходимо преобразовать в дикторион: (порядок строк может отличаться)

name : john doe
age : 23
gender : MALE
address : kendall 6, Miami
career: mechanical engineer
times going : 2
number of assignments : 4
semester : 4
average : 9.2
interests : gaming, robotics, drama movies
availability:
    friday : 6:30 - 10:30
    sunday : 12:30 - 13:30
    monday : 16:30 - 18:30

Выходной код должен выглядеть следующим образом:


{'name': 'john doe',
 'age': '23',
 'gender': 'MALE',
 'address': 'kendall 6, Miami',
 'semester': '4',
 'career': 'mechanical engineer',
 'average': '9.2',
 'times going': '2',
 'number of assignments': '5',
 'interests': 'gaming, robotics, drama movies',
 'availability':
                {'friday': (630,1030),
                 'sunday': (1230,1330),
                 'monday': (1630,1830)
                 }
}

На данный момент я успешно создал словарь прямо перед этим разделом «доступности»:


dicc={}
listRestrictions=["availability","monday","tuesday","wednesday","thursday","friday","saturday","sunday"]

for line in file:
    line = line.strip("\n").replace(" : ", ":").strip(" ")
    key = line[: line.index(":")]
    if key not in listRestrictions:
        value = line[line.index(":") + 1 :]
        dicc[key] = value

print(dicc)

И печатает:

{'name': 'john doe', 'age': '23', 'gender': 'MALE', 'address': 'kendall 6, Miami', 'career': 'mechanical engineer', 'times going': '2', 'number of assignments': '4', 'semester': '4', 'average': '9.2', 'interests': 'gaming, robotics, drama movies'}

(помня это может быть в любом файле .txt, и что даты всегда будут находиться в «доступности») ... Как бы я принял «доступность» в качестве значения, а затем даты в качестве под-словаря как показано выше?

Ответы [ 4 ]

0 голосов
/ 11 января 2020

Я не знаю, как вы тянете свои дни и время, но предположим, что они, например, в следующем формате для начала:

days = ['monday', 'tuesday', 'wednesday']
times = [(630, 1030), (830, 1400), (930, 1330)]

Тогда один из способов создать словарь доступности следующим образом:

dicc['availability'] = dict(zip(days, times))
print (dicc)
0 голосов
/ 11 января 2020
dicc = {}
for line in file:
        isAppended = line.startswith("    ")
        line = line.strip("\n").replace(" : ", ":").strip(" ")
        value = line[line.index(":") + 1 :]
        tempKey = line[: line.index(":")]
        if len(value)==0:
            currKey = tempKey
            tempDict = {}
        elif isAppended:
            tempDict[tempKey] = value
            dicc.update({currKey:tempDict})
        else:
            dicc[tempKey] = value
0 голосов
/ 11 января 2020
    dicc={}

    last_key = ''

    for _line in file:

        line = _line.strip("\n").replace(" : ", ":")

        line = line.strip(" ")
        key = line[: line.index(":")]
        last_key = key
        value = line[line.index(":") + 1 :]
        if // the first part of the line is a blank space:
            dicc[last_key][key] = value
        else:
            dicc[key] = value

    print(dicc)
0 голосов
/ 11 января 2020

Не уверен, почему вы пытаетесь такой разбор низкого уровня. Разве это не ЯМЛ? Это предположение довольно близко объясняет меня:

import yaml
from pprint import pprint

with open('data.txt') as f:
    data = yaml.load(f)

Тогда data - это вложенный словарь Python:

{'name': 'john doe',
 'age': 23,
 'gender': 'MALE',
 'address': 'kendall 6, Miami',
 'career': 'mechanical engineer',
 'times going': 2,
 'number of assignments': 4,
 'semester': 4,
 'average': 9.2,
 'interests': 'gaming, robotics, drama movies',
 'availability': {'friday': '6:30 - 10:30',
                  'sunday': '12:30 - 13:30',
                  'monday': '16:30 - 18:30'}}

Оставшиеся различия легко сделать, теперь, когда это Python структура данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...