多值Python字典的插入问题

2024-03-28 11:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还不熟悉,所以请对我宽容一点。我使用字典为一个键存储多个值,但是在尝试更新值时遇到了问题。下面是我如何设置字典的;首先,我使用setdefault()编写第一个值:

dictionary.setdefault(id.ID, []).append(id.enterTime)
dictionary.setdefault(id.ID, []).append(id.duration)
dictionary.setdefault(id.ID, []).append(id.enter)
dictionary.setdefault(id.ID, []).append(id.exit)
dictionary.setdefault(id.ID, []).append(id.standing)
dictionary.setdefault(id.ID, []).append(id.sitting)

为了便于解释,假设它在打印时产生以下输出:

{0: [5, 120, 0, 0, 0, 0]}

当输入id实例变量更改后,我只需删除原始值并将新值附加到字典中,即可使用以下代码更新字典:

dictionary[id.ID].remove(id.enter)
dictionary[id.ID].insert(2, id.enter)

词典打印如下:

{0: [5, 120, 1, 0, 0, 0]}

在程序的后面,实例变量id.出口变为1。我尝试在字典中将exit值从0更新为1后,将其更改如下:

dictionary[id.ID].remove(id.exit)
dictionary[id.ID].insert(3, id.exit)

我知道这样做很糟糕,但我认为这是更新值的最简单方法。当我这样做时,当它将id.enter更改回其原始值但更新id.exit时会出现问题:

{0: [5, 120, 0, 1, 0, 0]}

有人知道为什么会这样吗?谢谢。你知道吗


Tags: 实例iddictionary字典exitremoveinsertduration
2条回答

use@mkrieger1给出的答案解释了代码中的问题/错误,并给出了快速的解决方案。你知道吗

另一种存储数据的方法是使用嵌套的dict,使其更清晰,更不容易出错:

my_dict = {
    id.ID: {
        'enterTime': id.enterTime,
        'duration': id.duration,
        'enter': id.enter,
        'exit': id.exit,
        'standing': id.standing,
        'sitting': id.sitting,
    }
}

或者用defaultdict更好:

import collections
my_dict = collections.defaultdict(lambda: {
    'enterTime': 0,
    'duration': 0,
    'enter': 0,
    'exit': 0,
    'standing': 0,
    'sitting': 0,
})
print(my_dict)
# defaultdict(<function <lambda> at 0x7f327d094ae8>, {})

# add a new ID, it creates the nested dict automatically
my_dict[object_1.ID]['exit'] = object_1.exit
print(my_dict)
# defaultdict(<function <lambda> at 0x7f327d094ae8>, {1: {'enterTime': 0, 'duration': 0, 'enter': 0, 'exit': 5, 'standing': 0, 'sitting': 0}})

tutorial中所述:

list.remove(x)
Remove the first item from the list whose value is equal to x. It raises a ValueError if there is no such item.

如果你有名单

[5, 120, 1, 0, 0, 0]

使用remove(id.exit),当id.exit等于1时,列表变为:

[5, 120, 0, 0, 0]

作为一个简单的解决方案

dictionary[id.ID].remove(id.exit)
dictionary[id.ID].insert(3, id.exit)

只是使用

dictionary[id.ID][3] = id.exit

相关问题 更多 >