gpt4 book ai didi

python - 在嵌套字典上使用 for 循环

转载 作者:行者123 更新时间:2023-12-01 08:53:14 24 4
gpt4 key购买 nike

我有这样的代码:

def func_new(my_dict):
sorted_dict = {}
sub_dict={"#source#":'',"#dest#":'',"#join_order#":'',"#variable#":[] ,"#dest_name#":[]}
for key in my_dict:
sub_dict['#source#'] = key
my_dict1=my_dict[key]
for key in my_dict1:
sub_dict['#dest#'] = key
my_dict2=my_dict1[key]
for key in my_dict2:
sub_dict['#join_order#'] = key
my_dict3=my_dict2[key]
var_list = []
dest_list = []
for k,v in my_dict3.items():
var_list.append(k)
dest_list.append(v)
vari_list = var_list
dest_list = dest_list
sub_dict['#variable#'] = vari_list
sub_dict['#dest_name#'] = dest_list
print(sub_dict)
sorted_dict[sub_dict['#join_order#']] = sub_dict['#source#']
#comm-out#sorted_dict[sub_dict['#join_order#']] = sub_dict
return sorted_dict

输入嵌套字典是这样的:

my_dict = {'source_ appl': {'dest_dynamic': {1 : {u'appl_quoted_rt': u'appl_quoted_rt',
u'approve_amt': u'approve_amt',
u'approve_dt': u'approve_dt',
u'ltv_front_end': u'ltv_front_end',
u'period_end_dt': u'period_end_dt',
u'pti_front_end': u'pti_front_end'}},
'dest_static': {2: {u'account_id': u'account_id',
u'app1_bureau_score_no': u'app1_bureau_score_no',
u'app1_state': u'app1_state',
u'app2_bureau_score_no': u'app2_bureau_score_no',
u'appl_age_of_auto': u'appl_age_of_auto'}}},
'source_installment': {'dest_dynamic': {3: {u'acct_status_cd': u'acct_status_cd',
u'acct_status_desc': u'acct_status_desc',
u'acct_status_to_closed_flg': u'acct_status_to_closed_flg'}},
'dest_static': {4: {u'account_id': u'account_id',
u'acct_open_dt': u'acct_open_dt',
u'application_dt': u'application_dt'
}}}}

sorted_dict的输出是这样的:

    x = func_new(my_dict)

{1: 'source_ appl',
2: 'source_ appl',
3: 'source_installment',
4: 'source_installment'}

我的问题是我无法为整个 sub_dict 获得相同的结果(请参阅 func_new 中的注释行)。其输出将是这样的。

{1: {'#dest#': 'dest_static',
'#dest_name#': [u'acct_open_dt', u'account_id', u'application_dt'],
'#join_order#': 4,
'#source#': 'source_installment',
'#variable#': [u'acct_open_dt', u'account_id', u'application_dt']},
2: {'#dest#': 'dest_static',
'#dest_name#': [u'acct_open_dt', u'account_id', u'application_dt'],
'#join_order#': 4,
'#source#': 'source_installment',
'#variable#': [u'acct_open_dt', u'account_id', u'application_dt']},
3: {'#dest#': 'dest_static',
'#dest_name#': [u'acct_open_dt', u'account_id', u'application_dt'],
'#join_order#': 4,
'#source#': 'source_installment',
'#variable#': [u'acct_open_dt', u'account_id', u'application_dt']},
4: {'#dest#': 'dest_static',
'#dest_name#': [u'acct_open_dt', u'account_id', u'application_dt'],
'#join_order#': 4,
'#source#': 'source_installment',
'#variable#': [u'acct_open_dt', u'account_id', u'application_dt']}}

可以看出,它将每个 sub_dict 更改为循环的最新迭代。我不知道我在这里做错了什么。有人可以帮我解决这个问题吗?

最佳答案

这是因为当您执行 sorted_dict[sub_dict['#join_order#']] = sub_dict 时,您就使 sorted_dict[sub_dict['#join_order#']] 点到同一个实例sub_dict

Python 中的字典不是不可变的。 (查看 immutable 了解更多详细信息)

您必须创建一个新实例。
为此,请使用 dict

copy() 方法

尝试:

def func_new(my_dict):
sorted_dict = {}
sub_dict={"#source#":'',"#dest#":'',"#join_order#":'',"#variable#":[] ,"#dest_name#":[]}
for key in my_dict:
sub_dict['#source#'] = key
my_dict1=my_dict[key]
for key in my_dict1:
sub_dict['#dest#'] = key
my_dict2=my_dict1[key]
for key in my_dict2:
sub_dict['#join_order#'] = key
my_dict3=my_dict2[key]
var_list = []
dest_list = []
for k,v in my_dict3.items():
var_list.append(k)
dest_list.append(v)
vari_list = var_list
dest_list = dest_list
sub_dict['#variable#'] = vari_list
sub_dict['#dest_name#'] = dest_list

sorted_dict[sub_dict['#join_order#']] = sub_dict.copy()

return sorted_dict

关于python - 在嵌套字典上使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52967657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com