Обновление словарей для добавления данных файла - PullRequest
1 голос
/ 29 марта 2012

Я хочу создать функцию, которая обновляет два словаря данными из открытого файла.Первый диктат был бы диктом «от человека к странам», а второй - диктат «от человека к человеку».

Например, «человек в страны» будет выглядеть примерно так: {'Greg Van' : ['Canada', 'America'], 'Tori Mars' : ['Thailand']}, а диктат «человек в люди» будет {'Greg Van' : ['Mike Wu', 'Emily Salt'], 'Mia Tan' : ['Sandy Bay', 'Dan Hamilton']}.

Параметры функции будут (файл,dict of {string: список строк}, dict of {string: список строк}) -> NoneType

Текстовый файл будет выглядеть примерно так:

Chan, Ferah
Canada
Pritchett, Mitchell
Pritchett, Jay

Rad, Sarah
France
America
MacKenzie, Corey

Delgado, Manny
Luong, Sam

Vu, Linda
China
Khan, Jane

где первая строкаиз каждого списка есть человек, а затем он перечислит 0 или более стран, в которых они жили, вместе с 0 или более людьми.Там также будет пустой пробел между каждым человеком.Каждый список / параграф здесь в файле связан друг с другом.

Я не знаю, как обновить два существующих слова («человек в страны» и «человек в люди») с данными изданный файл (который включает в себя человека, страны и / или людей).Поэтому я хочу добавить данные к двум диктовкам.

Все, что я знаю, - это то, что я могу различать страны и людей через запятую, поскольку у стран их нет.

1 Ответ

0 голосов
/ 29 марта 2012

Исходя из схемы, которую я вижу, я могу сказать, что разница между странами и животными заключается в том, что страны пишутся с большой буквы, поэтому вы можете делать разные вещи: у вас может быть указание, где каждая буква является ключом и кортеж, который является значением, внутри значения (кортежа) у вас будет два списка, один для стран, а другой для домашних животных. Другой подход состоит в том, чтобы вместо кортежа было одно слово dict, и оно будет иметь два элемента, я покажу вам структуру этого слова:

    people = {'A': {'countries':['Canada',], 'pets':['dog', 'cat']}}

Это было бы отображение в элементе первого элемента. Код будет что-то вроде:

    people = {}
    file_read = open("asdf.in", "r")

    current_person = file_read.readline().strip()

    while current_person:    
        people[current_person] = {}
        line = file_read.readline().strip()
        people[current_person]['countries'] = []
        people[current_person]['pets'] = []
        while line:
            if line.istitle(): people[current_person]['countries'].append(line)
            elif line.islower(): people[current_person]['pets'].append(line)
            line = file_read.readline().strip()

        current_person = file_read.readline().strip()

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