遍历嵌套字典时遇到问题

问题描述 投票:0回答:1

我在向字典中的某个条目添加特定值时遇到问题。该值不是添加到嵌套字典中的一个特定条目,而是添加到字典中的所有条目。例如,如果我写

data_dict['2022-03-07']['政治行动委员会'] += 1

它将在 [every_date]['政治行动委员会'] 中添加条目 1

这是我的代码

import pandas
import datetime as dt
import plotly.graph_objects as go
import plotly.express as px

data_set = pandas.read_csv(r"C:\Users\Miles\Downloads\schedule_a-2024-03-02T09 13 57.csv")

data_dict = {}
contribution_dict = {"INDIVIDUAL":0,'ORGANIZATION':0,'POLITICAL ACTION COMMITTEE':0,'CANDIDATE':0,
                     'OTHER COMMITTEE':0, 'CAMPAIGN COMMITTEE':0  }

# a_list = ['INDIVIDUAL', 'ORGANIZATION', 'POLITICAL ACTION COMMITTEE', 'CANDIDATE', 'OTHER COMMITTEE',
#           'CAMPAIGN COMMITTEE']
list = []

for all_dates in range(len((data_set['contribution_receipt_date']))):
    contribution_date = data_set.at[all_dates, 'contribution_receipt_date'][:10]
    dummy = dt.date(int(contribution_date[:4]), int(contribution_date[5:7]), int(contribution_date[8:]))
    if dummy in list:
        pass
    else:
        list.append(dummy)

list.sort()
for all_values in range(len(list)):
    data_dict[str(list[all_values])] = contribution_dict


data_dict['2022-03-07']['POLITICAL ACTION COMMITTEE'] += 1

~~~
python dictionary nested
1个回答
0
投票

这是因为字典在Python中是可变类型。 在这个片段中:

for all_values in range(len(list)):
    data_dict[str(list[all_values])] = contribution_dict

您正在将相同的contribution_dict字典(相同的对象,内存中的相同地址)分配给所有data_dict键。

最快的解决方法是在每次循环迭代中创建一个新字典:

for all_values in range(len(list)):
    data_dict[str(list[all_values])] = contribution_dict.copy()
© www.soinside.com 2019 - 2024. All rights reserved.