3

我正在做一个初学者 Python 课程,目的是制作一堆字典。

  1. 创建三个字典:lloyd、alice 和 tyler。

给每个字典键“name”、“homework”、“quizzes”和“tests”。

让“name”键是学生的名字(也就是说,劳埃德的名字应该是“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 开发区域不允许它工作吗?我意识到我有点多余,而且我可以非常直接地做到这一点,并且我有目的地尝试在我如何做到这一点上发挥创造力。

无论如何,根据输入列表自动制作字典的方法是什么?

4

4 回答 4

6

您正在创建一个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您创建的字典,然后在最后将它们提供给您。

于 2018-05-17T21:12:27.190 回答
3

根据输入列表自动制作字典的方法是什么?

您可以在此处使用字典理解。生成器可以避免需要样板列表构造代码。在此解决方案中,我们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))
于 2018-05-17T21:18:51.613 回答
2

您正在创建三个字典;但是,每个变量都通过分配给同一个变量来覆盖前一个变量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")
于 2018-05-17T21:25:40.067 回答
-1
Vegetables={"tamato":40,"carrot":50,"onion":60,"green chillies":20,"red chillies":40,"capsicum":20,"radish":30,"drumstick":40,"beetroot":50,"peas":90}
Print(vegetables)
于 2020-11-02T10:06:49.090 回答