Как я могу автоматизировать создание словарей с помощью Python? - PullRequest
0 голосов
/ 18 мая 2018

Я делаю курс Python для начинающих, и цель состоит в том, чтобы сделать несколько словарей.

  1. Создайте три словаря: Ллойд, Алиса и Тайлер.

Дайте каждому словарю ключи "имя", "домашнее задание", "тесты" и "тесты".

Пусть ключом имени будет имя ученика (то есть имя Ллойда). должен быть "Lloyd"), а остальные ключи должны быть пустым списком (мы будем заполните эти списки в ближайшее время!)

Я сделал это, выполнив следующее:

def make_dict(list_of_names):
  for names in list_of_names:
    names = {
      "name": names,
      "homework" : [],
      "quizzes" : [],
      "tests" : []
  }

list_of_names = ["lloyd", 'alice', 'tyler']

make_dict(list_of_names)

Почему это не работает? Должно ли это работать, и это только область разработки Codeacademy, которая не позволяет этому работать? Я понимаю, что немного потрудился, и что я могу сделать это очень просто, и я намеренно пытаюсь проявить креативность в том, как я это делаю.

В любом случае, как автоматизировать создание словаря на основе списков входных данных?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Что такое автоматический способ создания словаря на основе списков входных данных?

Здесь можно использовать словарное понимание.Генератор может избежать необходимости в коде построения списка шаблонов.В этом решении мы yield элементов для каждого имени в списке.Вызов list затем исчерпывает генератор, и мы можем присвоить список переменной my_dicts.

def make_dict(lst):
    for name in lst:
        d = {k: [] for k in ('homework', 'quizzes', 'tests')}
        d['name'] = name
        yield d

list_of_names = ['lloyd', 'alice', 'tyler']

my_dicts = list(make_dict(list_of_names))
0 голосов
/ 18 мая 2018

Вы создаете три словаря;однако каждый перезаписывает предыдущий, присваивая этой же переменной names, а последний - сборщик мусора, потому что единственная ссылка на него - локальная переменная, которая выходит из области видимости при возврате make_dict.

Вам просто нужно вернуть созданного dict.Для этого упражнения не похоже, что вам действительно нужен цикл.

def make_dict(name):
    return {
      "name": name,
      "homework" : [],
      "quizzes" : [],
      "tests" : []
    }

lloyd = make_dict("lloyd")
alice = make_dict("alice")
tyler = make_dict("tyler")
0 голосов
/ 18 мая 2018

Вы создаете словарь с именем names в каждом цикле, но фактически ничего с ним не делаете -

def make_dict(list_of_names):
    results = []
    for names in list_of_names:
        names = {
            "name": names,
            "homework" : [],
            "quizzes" : [],
            "tests" : []
        }
        results.append(names)
    return results

list_of_names = ["lloyd", 'alice', 'tyler']

my_dicts = make_dict(list_of_names)

Он отслеживает созданные вами names диктовки, а затем выдает их вам в конце.

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