我有一个字典列表,初始化如下:
foo_fields = []
map(lambda x:foo_fields.append({}), range(0, anumber))
然后我将foo_fields
传递给以下函数:
afunction(aparam, alist, foo_fields)
在afunction
中:
AKEY = 'MAPPING_POS'
def afunction(aparam, alist, foo_fields):
foo_fields[0][AKEY] = 12
其中AKEY是字典键。
我知道
foo_fields[0][AKEY] = 12
IndexError: list index out of range
此代码是由一位前同事编写的,他没有遇到此错误。
这是怎么回事?
任何帮助将不胜感激!
答案 0 :(得分:3)
地图无法那样工作。 来自文档:https://docs.python.org/3/library/functions.html#map
map(函数,可迭代,...)
返回一个将函数应用于所有iterable的迭代器,并产生结果
因此,在示例map(lambda x:foo_fields.append({}), range(0, anumber))
中,您尝试将函数foo_fields.append({}),
本身返回None
应用于可迭代的range
,这没有任何意义。
实例化词典列表的正确方法是使用for循环来定义anumber
词典。
foo_fields = [{} for _ in range(anumber)]
然后您可以执行操作,例如
anumber = 10
#Use a for loop to define anumber dictionaries
foo_fields = [{} for _ in range(anumber)]
print(foo_fields)
#[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
#Assign value to first dictionary
foo_fields[0]['akey'] = 12
print(foo_fields)
#[{'akey': 12}, {}, {}, {}, {}, {}, {}, {}, {}, {}]