【问题标题】:How can I automate making dictionaries using python?如何使用 python 自动制作字典?
【发布时间】:2018-10-28 06:08:12
【问题描述】:

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

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

为每本词典指定键“姓名”、“作业”、“测验”和 “测试”。

让“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 开发区域不允许它工作吗?我意识到我有点多余,我可以非常直接地做到这一点,并且我有目的地尝试在我的工作方式上发挥创造力。

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

【问题讨论】:

  • 是开发区。我有使用 codecademy 的经​​验,他们的系统只有在完全正确的情况下才会检测到它是正确的。然而,它在空闲时完美运行。您可能只想跳过。
  • 以下答案之一有帮助吗?如果是这样,请考虑accepting(左侧的绿色勾号),或要求澄清。

标签: python list dictionary automated-deployment


【解决方案1】:

您在每个循环中创建了一个名为 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 dicts,然后在最后将它们提供给您。

【讨论】:

  • 该死,打败我。重申一下,您需要返回您创建的变量。在此答案中,您将返回字典列表
  • 虽然这确实有效,但您可能希望将循环内的 names = ... 变量重命名为其他名称,以避免混淆,因为 OP 是 Python 的新手。
  • 谢谢!事实上,下一个练习实际上是把字典变成一个列表,所以这太棒了!真的很感激:)
【解决方案2】:

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

您可以在此处使用字典推导式。生成器可以避免需要样板列表构造代码。在此解决方案中,我们为列表中的每个名称提供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))

【讨论】:

  • 对于真正知道自己在做什么但使用 fromkeys 和 yield 来回答有关初学者 Python 课程的问题的人来说很好而且干净,这可能比必要的更不透明。不过我没有投反对票,我喜欢它
  • @MoxieBall,对不起,dict.fromkeys 在这里不起作用,因为每个键都将引用相同的列表。但是dict 理解也有效,而且在我看来,它是可读的。在我看来,生成器未被充分利用,但在概念上很简单。
  • 谢谢。这似乎是对我的问题的高级答案,我会将其添加到我的“当我更好时阅读”列表中 - 非常感谢增长建议!
  • @noamcompsci,当然,IMO(当您了解推导式和生成器时)回过头来看看如何以不同的方式解决问题总是一件好事。
  • @jpp 感谢您的更新,我不可能一眼就告诉您您的原始答案是错误的,这无疑扩大了我对如何利用字典的了解
【解决方案3】:

您正在创建三个字典;但是,每一个都通过分配给同一个变量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")

【讨论】:

    【解决方案4】:
    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)
    

    【讨论】:

    • 请解释您正在尝试的答案。
    • 另外,你有一个蔬菜错字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2013-03-31
    • 2021-12-07
    • 2015-04-25
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多