在Python中如何使用变量作为数组索引?

在Python中如何使用变量作为数组索引?,python,pandas,data-structures,openpyxl,Python,Pandas,Data Structures,Openpyxl,我有两门课,Product和Transaction 每个产品对象表示已销售的产品,每个交易对象表示已销售的产品数量 我正在制作一个名为产品列表的产品对象数组和一个名为交易列表的交易对象数组。这两个类都有一个名为ProductID的属性,它是由一些字符组成的字符串,如“ABCDE”。我需要做的是将每个事务对象中的数据添加到产品对象的属性中 目前,我在Transaction对象中有一个名为product\u list\u index的属性,该属性与product\u list数组中product对象

我有两门课,
Product
Transaction

每个
产品
对象表示已销售的产品,每个
交易
对象表示已销售的产品数量

我正在制作一个名为
产品列表
产品对象数组和一个名为
交易列表
交易对象数组。这两个类都有一个名为
ProductID
的属性,它是由一些字符组成的字符串,如“ABCDE”。我需要做的是将每个
事务
对象中的数据添加到
产品
对象的属性中

目前,我在
Transaction
对象中有一个名为
product\u list\u index
的属性,该属性与
product\u list
数组中
product
对象的索引相同,该数组与给定的
Transaction
对象具有相同的
ProductID

我的方法是迭代数组中的每个事务,并将每个
transaction
对象的
product\u list\u索引设置为具有匹配
ProductID
属性的
product
对象的索引。因此,当我将数据添加到
产品
对象时,它将如下所示:

x=1
(这将是来自交易的数据)

产品列表[产品列表索引].此产品的总销售加仑数+=x

有没有更好的方法基于变量将对象链接在一起,而不是遍历每个对象以找到正确的索引

下面是我的代码的一个最简单的例子(有很多代码可以让人阅读):


事务
有一个
产品
实例来代替
产品ID

class Transaction:
    def __init__(self, product):
        self.product = product
然后你可以:

def generate_product_list():
    productId2Product = {}
    ...  # reading from file
        productId2Product[productId] = Product(productId)
    return productId2Product


def generate_transaction_list(productId2Product):
    transaction_list = []
    ...  # reading from file
        transaction_list.append(Product(productId2Product[productId]))
    return transaction_list
     

productId2Product = generate_product_list()

array_transaction_data = generate_transaction_list(productId2Product)

array_transaction_data[i].product.total_gallons_sold_of_this_product += x

这类问题是字典的理想用例。字典非常类似于数组,但您可以使用任意字符串,而不是使用序列号
0,1,2…
作为键(这将是一个数组)。所以你可以有,比如

产品={
“1a1a”:MyDrillObject,
“2b2b”:MyScrewsProduct,
“fffee”:MyTowerProduct
}
然后检索表示产品的特定对象,例如

drill_obj=产品['1a1a']
这种查找是有效的,它不会遍历字典中的所有键

因此,为了解决您的问题,您可以取消产品列表索引,而直接使用
ProductID
作为字典键

这将简化预处理步骤,只需将所有产品添加到产品字典:

product_dict={p.ProductID:p代表产品中的p}
然后在处理事务时,您可以直接使用productID:

产品目录[transaction.ProductID]。此产品的总销售加仑数+=x

请提供您迄今为止的代码,请包括一个!如果包含代码,我们可以更好地理解您的问题!我根据脚本的外观添加了一些代码,只添加了与我需要执行的操作相关的部分。谢谢你让我知道你在找字典吗?@MadPhysicast看起来我同意,如果事务有多个产品,就作为列表实现。另一个实现是使用相同的方法或交易id为每个售出的产品提供一个对交易的引用。我如何在
产品列表
数组中指向正确的
产品
对象?@svenfulen我编辑了它。请检查它。您的意思是如何确定您正在处理的
产品的类型,或者如何查找特定的
产品
?例如,有3种不同的产品,每个产品在数组中都有自己的对象。
事务
对象需要将数据添加到具有相同
ProductID
产品
对象。此解决方案易于实现。
def generate_product_list():
    productId2Product = {}
    ...  # reading from file
        productId2Product[productId] = Product(productId)
    return productId2Product


def generate_transaction_list(productId2Product):
    transaction_list = []
    ...  # reading from file
        transaction_list.append(Product(productId2Product[productId]))
    return transaction_list
     

productId2Product = generate_product_list()

array_transaction_data = generate_transaction_list(productId2Product)

array_transaction_data[i].product.total_gallons_sold_of_this_product += x