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"如果字典已经在列表中,则更新它,否则将写入某个值)
你不会使用列表。使用字典,将 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;否则只是一个平面字典映射ID到VALUE值的平面字典就足够了。
字典可让您在 O(1) 时间内按键查找值(与字典大小无关的恒定时间)。列表也可以让您在恒定时间内查找元素,但前提是您知道索引。
如果您不这样做并且必须扫描列表,则您将执行 O(N) 操作,其中 N 是元素的数量。您需要查看列表中的每一个字典以查看它是否匹配ID,如果ID不存在,则意味着您必须从头到尾搜索。字典仍然会在 O(1) 时间内告诉你密钥不存在。