Python 你能在通过列表理解创建词典时引用它吗?

Python 你能在通过列表理解创建词典时引用它吗?,python,pandas,dictionary,Python,Pandas,Dictionary,我正在尝试使用列表理解从pandas数据框填充字典。我的问题是,我需要向现有密钥添加数据,而不是覆盖它们 def Load_Dataframes(cursor): negativeitems = Load_NegativeOnhand(cursor) materiallog = Load_Materiallog(cursor) negativetrans = Join_Dataframes(negativeitems, materiallog) datadict

我正在尝试使用列表理解从pandas数据框填充字典。我的问题是,我需要向现有密钥添加数据,而不是覆盖它们

def Load_Dataframes(cursor):
    negativeitems = Load_NegativeOnhand(cursor)
    materiallog = Load_Materiallog(cursor)
    negativetrans = Join_Dataframes(negativeitems, materiallog) 
    datadict = {}
    datadict = {row[0]:Calculate_Transaction_History(row, datadict) for row in negativetrans[['item-no', 'tran-date', 'tran-time',
                                                                                       'on-hand', 'quantity', 'whse',
                                                                                        'order-no']].values}

def Calculate_Transaction_History(row, datadict):
        if not row[0] in datadict.keys():
            data = Shortage_Data.ShortageData()
            data.addrow(row)
        else:
            data = datadict[row[0]].addtransactions(row)

        return data   
这会填充字典,但参数datadict是空字典,因此if语句是无用的。使用列表理解来实现这一点是可行的,还是应该只使用itertuples()

开始数据帧:

item-no on-hand quantity
item1   -10     2
item1   -10     4
item1   -10     10
item2   -5      1
item2   -5      1
item3   -3      2
最终目标使用key:item no value:class对象创建字典

keys   data.on-hand  data.quantity
item1  -10           16
item2  -5            2
item3  -3            2

分组在这里不起作用,它在本例中起作用,但在我完全试图完成的工作中不起作用。

您能添加一个小样本数据帧和与之对应的所需输出吗?并删除所有与当前问题无关的代码?如果你这样做了,人们会更容易给你一个有用的答案。直到理解完成后,作业才会进行。因此,您可以在理解中引用它,但它将保留它在理解运行之前存在的任何值/状态(在您的例子中是空的)。对于您的上一个语句,我不知道
itertuples()
是/是什么,但是如果您使用常规for循环而不是理解,您的字典将通过循环以增量方式构建(上一次迭代的数据将出现在下一次迭代中)。@b_c它只是以命名元组的形式在数据帧行上进行迭代。我试图避免它,因为我的实际数据框架是一个重要的事务分类账,而且是巨大的,我试图使用列表理解来加速它,但我想不出如何绕过这个问题。使用分组是行不通的,我不能只对某些列求和,还有其他条件对这个问题并不重要。你能添加一个小样本数据框和与之对应的所需输出吗?并删除所有与当前问题无关的代码?如果你这样做了,人们会更容易给你一个有用的答案。直到理解完成后,作业才会进行。因此,您可以在理解中引用它,但它将保留它在理解运行之前存在的任何值/状态(在您的例子中是空的)。对于您的上一个语句,我不知道
itertuples()
是/是什么,但是如果您使用常规for循环而不是理解,您的字典将通过循环以增量方式构建(上一次迭代的数据将出现在下一次迭代中)。@b_c它只是以命名元组的形式在数据帧行上进行迭代。我试图避免它,因为我的实际数据框架是一个重要的事务分类账,而且是巨大的,我试图使用列表理解来加速它,但我想不出如何绕过这个问题。使用分组是行不通的,我不能只对某些列求和,还有其他标准对这个问题并不重要。