学习Python:有没有更好的方法从字符串列表创建字典而不是这个?

时间:2016-06-03 21:26:09

标签: python

我正在阅读关于python的Code Academy课程,一堂课要求你做以下几点。

将三个词典命名为" lloyd"," alice"和" tyler。然后,对于每个字典集,键名等于" Lloyd"," Alice"和" Tyler"分别。然后每个字典应该有三个键(家庭作业,测验和测试)等于空列表。

我想出了这个:

students = ["lloyd", "alice", "tyler"]

for x in students:

    # capitalize first letter in name
    capital_name = x[0].upper() + x[1:]

    # make empty dictionary with student's name
    exec("%s = {}" % x)

    # define keys. For name, set equal to name with capitalized first letter
    exec("%s['name'] = capital_name" % x)
    exec("%s['homework'] = []" % x)
    exec("%s['quizzes'] = []" % x)
    exec("%s['tests'] = []" % x)

    eval("print(%s)" % x)

我在最后添加了打印以确认我做了什么。我已经学会了在循环中使用Stata进行编程,这实际上是根据字面意思来评估你的循环(它执行exec / eval没有任何其他命令)。

如果有1000名学生,为每个学生手动定义字典是不明智的,那么除了我刚刚展示的内容之外你会怎么做?

1 个答案:

答案 0 :(得分:0)

这是另一种方法,通过设置一个主要词典,将每个学生的信息作为字典保存。

students = ["lloyd", "alice", "tyler"]
students_dicts = {}

for s in students:
  students_dicts[s.capitalize()] = {'homework': [], 'quizzes': [], 'tests': []}

# if the single dicts is demanded, loop for them
for st in students_dicts:
  print("%s => " % st, students_dicts[st])

除非课程是关于元编程的,否则这应该足够了。