当附加到 Pandas DataFrame 中字典中的列表时,它附加到列中的所有字典而不是我指向的字典

When appending to a list within a dictionary within a Pandas DataFrame, it appends to all dictionaries in column instead of the one I'm pointing to

这是我的代码

import pandas as pd

keys = ['phone match', 'account match']
d = {k: [] for k in keys}

df = pd.DataFrame(data=[[1,2,3],[4,5,6]],columns=['A','B','C'])
df['D'] = [d for _ in range(df.shape[0])]
df.at[0, 'D']['phone match'].append(4)

但它不是仅追加到索引 0 处的字典,而是追加到所有字典,因此输出是:

   A  B  C                                          D
0  1  2  3  {'phone match': [4], 'account match': []}
1  4  5  6  {'phone match': [4], 'account match': []}

虽然所需的输出是:

   A  B  C                                          D
0  1  2  3  {'phone match': [4], 'account match': []}
1  4  5  6  {'phone match': [], 'account match': []}

我认为这是因为 python 链接到同一个词典,但我该如何避免呢?

您需要创建多个 dict 以使每个对象具有不同的对象 ID

keys = ['phone match', 'account match']
df = pd.DataFrame(data=[[1,2,3],[4,5,6]],columns=['A','B','C'])
df['D'] = [{k: [] for k in keys} for _ in range(df.shape[0])] # Change here 
df.at[0, 'D']['phone match'].append(4)
df
Out[65]: 
   A  B  C                                          D
0  1  2  3  {'phone match': [4], 'account match': []}
1  4  5  6   {'phone match': [], 'account match': []}

dict 对象在 python 中通过引用传递。

为了实现您想要的效果,您可以使用以下行,它为每一行创建一个 d 的副本:

df['D'] = [d.copy() for _ in range(df.shape[0])]