Python:字典初始化无效

时间:2019-05-22 13:25:33

标签: python

我有一个字典列表,初始化如下:

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

此代码是由一位前同事编写的,他没有遇到此错误。

这是怎么回事?

任何帮助将不胜感激!

1 个答案:

答案 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}, {}, {}, {}, {}, {}, {}, {}, {}, {}]