重新初始化列表

时间:2017-10-03 07:53:10

标签: python

我有一个字典列表,通过调用函数来初始化:

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)

我不明白为什么通过附加到空列表进行初始化是有问题的,也不清楚为什么什么工作可以初始化,当列表为空时不起作用。它首先被创建为空!

有没有更好的方法来初始化或附加到空列表?

1 个答案:

答案 0 :(得分:0)

答案是不要声明一个空字典列表,而只是一个空列表。一些受访者指出了这个错误,但没有说明答案。

使用以下内容声明一个空字典列表:

devices=[{}]

使用空字典创建一个空列表。使用以下内容分配第一个字典:

dev[0] = new

刚刚更换了空字典。因此,当列表清空时,为什么相同的赋值不起作用。

正确的初始化只是声明:

devices = []

之后添加任何字典,包括第一个字典,都是在函数中使用附加:

dev.append(new)

感谢所有指针。我通过将IDE从Atom切换到Idle进行测试找到了答案。我必须使用Atom,因为它是唯一带有PyCom插件的IDE。空闲几乎立即标记了错误。