迭代python dict的值并同时更新

时间:2014-03-31 19:29:44

标签: python dictionary

我想知道如何迭代值并同时更新python的dict。为什么以下代码不起作用?

for values in First_Dict.values():
    if True:
        Second_Dict= Function(values)
        First_Dict.update(Second_Dict)

有一个解决方案,但它不是很优雅。它包括一个列表和iter()。显然,我不关心钥匙。

tempList = [i for i in First_Dict.values()]
iterator = iter(tempList)
while True:  
    try:   
        TempIterator = iterator.next()  
    except StopIteration:
        break  
        if True:
            Second_Dict= Function(values)
            for j in Second_Dict.values():  
                tempList.append(j)

1 个答案:

答案 0 :(得分:2)

你太复杂了;只需在list()上使用dict.values()即可创建副本并避免获取RuntimeError: dictionary changed size during iteration例外:

for value in list(First_Dict.values()):
    if True:
        First_Dict.update(Second_Dict)

如果您需要动态增长的列表,请先存储列表,然后循环:

values = list(First_dict.values())
for value in values:
    if True:
        values.extend(Second_Dict.values())

这当然不会更新原始字典,只需扩展values列表。

这假设您使用的是Python 3;在Python 2中,dict.values()已经返回了列表副本,而不是字典视图;你直接使用values = First_dict.values()