检查 python 字典列表中的项目

alw*_*btc 0 python dictionary list

我有一个字典列表=

a = [{"ID":1, "VALUE":2},{"ID":2, "VALUE":2},{"ID":3, "VALUE":4},...]
Run Code Online (Sandbox Code Playgroud)

"ID"是每个字典的唯一标识符。考虑到列表很大,检查具有特定内容的字典是否在列表中(如果不附加到列表中)的最快方法是什么?"ID"然后更新它"VALUE""VALUE"如果字典已经在列表中,则更新它,否则将写入某个值)

Mar*_*ers 5

你不会使用列表。使用字典,将 id 映射到嵌套字典:

a = {
    1: {'VALUE': 2, 'foo': 'bar'},
    42: {'VALUE': 45, 'spam': 'eggs'},
}
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要包括ID键包含在嵌套字典中;这样做是多余的。

现在您可以简单地查找键是否存在:

if someid in a:
    a[someid]['VALUE'] = newvalue
Run Code Online (Sandbox Code Playgroud)

我确实假设您的ID密钥不一定是连续的数字。我还假设您还需要存储其他信息VALUE;否则只是一个平面字典映射IDVALUE值的平面字典就足够了。

字典可让您在 O(1) 时间内按键查找值(与字典大小无关的恒定时间)。列表也可以让您在恒定时间内查找元素,但前提是您知道索引

如果您不这样做并且必须扫描列表,则您将执行 O(N) 操作,其中 N 是元素的数量。您需要查看列表中的每一个字典以查看它是否匹配ID,如果ID不存在,则意味着您必须从头到尾搜索。字典仍然会在 O(1) 时间内告诉你密钥不存在。