繁体   English   中英

如何在for循环中创建新字典?

[英]how to create a new dictionary in for loop?

在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_dictob_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() 但是,对于AFAIK,没有一种方法可以让您同时复制和更新字典。

但是,此时将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相同:update方法仅修改当前对象,并且您必须显式复制该对象以避免产生副作用。

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)`enter code here

总是有更好的方法来执行此操作。 您还可以在Python中使用update()方法将新项目添加到字典中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM