我有一个字典列表,通过调用函数来初始化:
new = {'device_id':name,'device_mac':mac, 'device_ttl':ttl}
dev[0] = new
此后,新条目附加:
dev.append(new)
每个词典都有生存时间(TTL)。到达后,字典将被删除:
for i in dev:
if (i['device_ttl'] == 0):
dev.remove(i)
这一切看起来都很好,直到列表完全为空。如果我然后尝试添加一个新条目:
dev[0] = new
再次,我得到'列表索引超出范围'错误。
我尝试使用附加到空列表来更改原始初始化,但是立即使用KeyError:device_id进行轰炸。
添加条目的整个功能是:
# Adds a new device to the list of known devices.
def add_device(dev, num, name, mac, ttl):
new = {'device_id':name,'device_mac':mac, 'device_ttl':ttl}
if (num == 0):
#dev.append(new)
#dev = new
dev[0] = new
else:
dev.append(new)
return (num + 1)
主要例程的基本部分是:
devices = [{}] # Empty list.
num_devices = 0
# Code that determines whether to add to the list or not
num_devices = add_device(devices, num_devices,\
name_long, mac_address, ttl_n)
我不明白为什么通过附加到空列表进行初始化是有问题的,也不清楚为什么什么工作可以初始化,当列表为空时不起作用。它首先被创建为空!
有没有更好的方法来初始化或附加到空列表?
答案 0 :(得分:0)
答案是不要声明一个空字典列表,而只是一个空列表。一些受访者指出了这个错误,但没有说明答案。
使用以下内容声明一个空字典列表:
devices=[{}]
使用空字典创建一个空列表。使用以下内容分配第一个字典:
dev[0] = new
刚刚更换了空字典。因此,当列表清空时,为什么相同的赋值不起作用。
正确的初始化只是声明:
devices = []
之后添加任何字典,包括第一个字典,都是在函数中使用附加:
dev.append(new)
感谢所有指针。我通过将IDE从Atom切换到Idle进行测试找到了答案。我必须使用Atom,因为它是唯一带有PyCom插件的IDE。空闲几乎立即标记了错误。