gpt4 book ai didi

python - 如何在for循环中创建一个新字典?

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:49 24 4
gpt4 key购买 nike

在 python 3.5.1 中

og_dict = {'name':'user1', 'salary':'1k'}
og_dict_list =[]
for i in range(2,5):
og_dict['salary'] = str(i)+'k'
og_dict_list.append(og_dict)
for og_dict_obj in og_dict_list:
print(og_dict_obj)

以上代码产生以下输出:

{'name': 'user1', 'salary': '4k'}
{'name': 'user1', 'salary': '4k'}
{'name': 'user1', 'salary': '4k'}

但我期待以下输出:

{'name': 'user1', 'salary': '2k'}
{'name': 'user1', 'salary': '3k'}
{'name': 'user1', 'salary': '4k'}

显然 python 仅修改现有字典,而不会创建新字典。我该怎么做才能解决这个问题?

有没有一种方法可以从现有的字典对象中创建一个新的字典对象?还有其他更适合这个的集合吗?

最佳答案

正如已经指出的那样,无论您做什么,只要在循环中:

for ob_dict_obj in ob_dict_list:
print(ob_dict) # wrong!

它总是打印 ob_dict 的值,而不管您在 ob_dict_list 中输入什么值。


这表示问题是您正在修改 唯一 字典。您想为每次迭代创建一个新的:

og_dict = {'name':'user1', 'salary':'1k'}
og_dict_list =[]
for i in range(2,5):
new = og_dict.copy()
new['salary'] = str(i)+'k'
og_dict_list.append(new)
for og_dict_obj in og_dict_list:
print(og_dict_obj)

有很多方法可以复制字典,比如只做 dict(of_dict) 而不是调用 .copy()。但是,据我所知,没有一种方法可以让您同时复制和更新字典。

然而,此时将 og_dict 放在循环之外没有多大意义:

og_dict_list =[]
for i in range(2,5):
og_dict = {'name':'user1', 'salary':str(i) +'k'}
og_dict_list.append(og_dict)
for og_dict_obj in og_dict_list:
print(og_dict_obj)

回答您的更广泛的问题:您正在寻找的行为类型是具有持久数据结构的函数式语言的典型行为。然而,在命令式语言中,具有复制和更新的操作将是一种简单的方法,因为它会创建大量不需要的副本,从而搬起石头砸自己的脚。

所有 内置 cointainer 的行为与 dict 相同:更新方法只是修改当前对象,您必须显式复制对象以避免副作用。

关于python - 如何在for循环中创建一个新字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830612/

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