【问题标题】:Making a class, put in dictionary then in list制作课程,放入字典然后放入列表
【发布时间】:2020-07-24 04:27:33
【问题描述】:

我的第一个问题。

如何使用类(带有属性)制作脚本,然后将这些属性放入字典中,然后将该字典放入列表中。我尝试了很多选项,但无法获得“好”或“高效”或正确的输出。

我想访问某些属性,这就是我得到的(不要介意名称,它用于测试)

exercise_list = []
exercise_dict = {}


class Exercises(object):

    def __init__(self, amount, category, info):

        self.amount = amount
        self.category = category
        self.info = info
        exercise_dict.__setitem__("amount", self.amount)
        exercise_dict.__setitem__("category", self.category)
        exercise_dict.__setitem__("info", self.info)
        exercise_list.append(exercise_dict)


Exercises(10, "arm", "Arm curls")
Exercises(20, "legs", "Squats")

print(exercise_list)
print(exercise_list[0])
print(exercise_list[1])

输出不是我想要的,列表被覆盖:

[{'amount': 20, 'category': 'legs', 'info': 'Squats'}, {'amount': 20, 'category': 'legs', 'info': 'Squats'}]
{'amount': 20, 'category': 'legs', 'info': 'Squats'}
{'amount': 20, 'category': 'legs', 'info': 'Squats'}

进程以退出代码 0 结束

【问题讨论】:

  • 为什么首先要使用 class → dict → list? Exercises 对象列表有什么问题?!
  • 你为什么要显式调用__setitem__,而不是写exercise_dict["amount"] = self.amount
  • 我在 python 方面没有经验,只是在网上学习和查看如何做某些事情......所以我看到了这个选项,它“有效”

标签: python list class dictionary


【解决方案1】:

这可以大大简化。你不需要一个全局的exercise_dict;你想为每个对象创建一个 new dict。

exercise_list = []


class Exercises(object):

    def __init__(self, amount, category, info):
        e = {}
        self.amount = e['amount'] = amount
        self.category = e['category'] = category
        self.info = e['info'] = info
        exercise_list.append(exercise_dict)

exercise_list = []


class Exercises(object):

    def __init__(self, amount, category, info):

        self.amount = amount
        self.category = category
        self.info = info

        exercise_list.append({'amount': amount, 'category': category, 'info': info})

【讨论】:

    【解决方案2】:

    每次你打电话给班级时,只需回忆一下练习字典

    exercise_list = []
    
    class Exercises(object):
    
        def __init__(self, amount, category, info):
            exercise_dict = {}
            self.amount = amount
            self.category = category
            self.info = info
            exercise_dict["amount"] = self.amount
            exercise_dict["category"] = self.category
            exercise_dict["info"] = self.info
            exercise_list.append(exercise_dict)
    
    
    Exercises(10, "arm", "Arm curls")
    Exercises(20, "legs", "Squats")
    
    print(exercise_list)
    print(exercise_list[0])
    print(exercise_list[1])
    

    输出:

    [{'amount': 10, 'category': 'arm', 'info': 'Arm curls'}, {'amount': 20, 'category': 'legs', 'info': 'Squats'}]
    {'amount': 10, 'category': 'arm', 'info': 'Arm curls'}
    {'amount': 20, 'category': 'legs', 'info': 'Squats'}
    

    【讨论】:

    • 啊,感谢编辑@chepner。我没有看到完整的代码
    【解决方案3】:

    您总是将相同的引用添加到您的列表中。实际上,您设置它、添加它,然后修改同一个对象。仔细想想,dict 是一个具有属性的对象。如果您要向列表中添加一个对象并修改它的属性,您会期望这种行为。

    TL;DR:在将其添加到列表之前,您必须创建另一个 dict。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多