【问题标题】:Filling a dictionary of lists with class instances [closed]用类实例填充列表字典[关闭]
【发布时间】:2020-11-04 15:47:06
【问题描述】:

我想用列表填充字典。列表应该包含一个类的实例。

class MyClass:
    def __init__(self, start, stop):
        self.start = start
        self.stop = stop

到目前为止,这是我尝试过的:

dict = {}  # create empty dictionary
for i in range(5):  # 5 keys in the dictionary
    for j,k in zip(range(3),[1,10,100]):  # list for each key: 1,10,100
        dict[i][j] = MyClass(0,k)

我想要的输出是:

print(dict[0][0].stop)
   1

print(dict[0][1].stop)
   10

print(dict[0][2].stop)
   100

这样我可以在第一个方括号中指定键,在第二个方括号中指定列表条目的索引。

【问题讨论】:

  • 在这种情况下,您希望最终的 dict 看起来像什么?该示例足够小,您应该能够完整地输入它,并且更容易理解您的意图。
  • 我认为您误解了字典的概念。您不想访问带有索引的字典。您想使用密钥访问它。
  • 哎呀,我说得太糟糕了。在第一个方括号中我要指定键,在第二个中指定列表的索引
  • 不过,你为什么要使用字典?如果您只是使用索引访问它,请改用列表列表。您将其命名为键,但您只是将其误用作索引。
  • 哦,对了,这可能就是我需要的。感谢您的帮助

标签: python list class dictionary


【解决方案1】:

首先要注意:永远不要使用dict作为变量名,因为它是字典的保留关键字!

为什么不简单地将列表分配给相应的键?像这样:

d = {}
for i in range(5):
    d[i] = [1, 10, 100]

当您改用dictionary comprehension 时,一种更简单易读的方法是:

d = {k : [1, 10, 100] for k in range(5)}

编辑:

根据我从您的 cmets 中了解到的情况,您似乎在滥用字典。如果您只想通过索引访问某些内容,您应该考虑使用tuplelist。我对您的用例的建议:

classes = [[MyClass(0,k) for k in [1,10,100]] for _ in range(5)]

print(classes[0][0].stop) # 1
print(classes[0][1].stop) # 10
print(classes[0][2].stop) # 100

【讨论】:

  • 非常感谢。但我刚刚意识到我过于简化了我的问题。我实际上想要一个列表字典,其中列表包含 Class 实例。第一个类实例应该有 1 作为属性,第二个 10 和第三个实例 100 作为属性。
  • 您能否将所需的输出添加到您的问题中,以便每个人都知道您想要实现的目标。
  • 我更新了问题。你能理解我想要达到的目标吗?
  • 其实我没有。当您通过某些索引访问字典时,您能否说明为什么要使用字典。
【解决方案2】:

好吧,您没有在此处将任何列表添加到您的字典中。如果您想使用这种方法,请在每次迭代时添加一个列表:

for i in range(5):  # 5 keys in the dictionary
    dict[i] = [] # add a list
    for j,k in zip(range(3),[1,10,100]):  # list for each key: 1,10,100
        dict[i].append(k)

你也可以用字典理解在一行中完成:

the_dict = {i: [1,10,100] for i in range(5)}

【讨论】:

    【解决方案3】:

    您可以使用此代码

    dict = {}  # create empty dictionary
    for i in range(5):  # 5 keys in the dictionary
        dict[i] = []
        for k in [1,10,100]:  # list for each key: 1,10,100
            dict[i].append(k)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2019-10-03
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多