【问题标题】:how to create a dictionary using lists in a python class?如何使用 python 类中的列表创建字典?
【发布时间】:2018-05-18 01:42:28
【问题描述】:

我正在尝试创建一个投资组合类。我想将我的两个列表压缩到字典中,但是当我尝试将其打印出来时,它是空的(即使我的列表不是)。我错过了什么吗??

import numpy as np

class Portfolio(object):
    """description of class"""

    array_of_stock_prices=[]
    array_of_stock_names=[]
    #create a dictionary of stocks
    stocks=dict(zip(array_of_stock_names,array_of_stock_prices))


    def __init__(self):
        print()    

    def AddStock(self,stock_ticker,stock_price):
        self.array_of_stock_names.append(stock_ticker)
        self.array_of_stock_prices.append(stock_price)


    def printObject(self):
        for key,value in self.stocks.items():
            print(key,value)


port1=Portfolio()
port1.AddStock('AApl',100)
port1.printObject()

【问题讨论】:

  • 创建字典时,列表为空
  • 你只初始化stocks一次。
  • 您的股票字典是在您调用 Addstock 之前创建的,即字典是在您的列表有任何值之前创建的。您的任何函数都不会修改字典,因此它保持为空。
  • 警告您的 array_of_stock_prices、`array_of_stock_names` 和 stocks 是类属性(在类的所有实例之间共享)。我不认为那是你想要的。
  • 另外,你为什么要维护两个列表一个字典而不是一个字典?这违反了 SPOT 规则(=>“Single Point Of Truth”)。

标签: python class dictionary


【解决方案1】:

您只创建一次字典,列表为空。如果你想让它保持最新,在列表的每个扩展之后(在AddStock 的末尾)放置那行代码,并将这个字典作为self 的属性,比如

self.stocks = dict(zip(self.array_of_stock_names, self.array_of_stock_prices))

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 2016-01-08
    • 2020-03-07
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2017-05-05
    • 2022-11-18
    相关资源
    最近更新 更多