items = [{"ID":1, "VALUE":2}, {"ID":2, "VALUE":2}, {"ID":3, "VALUE":4}]
def set_value_by_id(id, value):
# Try to find the item, if it exists
for item in items:
if item["ID"] == id:
break
# Make and append the item if it doesn't exist
else: # Here, `else` means "if the loop terminated not via break"
item = {"ID": id}
items.append(id)
# In either case, set the value
item["VALUE"] = value
将列表转换为dict,然后检查值会更有效。你知道吗
你不会使用列表。改用字典,将ID映射到嵌套字典:
注意,您不需要在嵌套字典中包含
ID
键;这样做是多余的。你知道吗现在您只需查找是否存在密钥:
我确实假设您的
ID
键不一定是序列号。我还假设您需要存储除VALUE
之外的其他信息;否则,只需将ID
映射到VALUE
值的扁平字典就足够了。你知道吗字典允许您按O(1)时间(与字典大小无关的常数时间)中的键查找值。列表也允许您在固定时间内查找元素,但只有知道索引时才可以。你知道吗
如果您不需要并且必须扫描列表,那么就有一个O(N)操作,其中N是元素数。您需要查看列表中的每一个字典,看看它是否匹配
ID
,如果ID
不存在,这意味着您必须从头到尾进行搜索。字典仍然会在一(1)分钟内告诉你钥匙不在那里。你知道吗如果可以,请按照其他答案的建议转换为字典,但如果您有理由*不更改存储项目的数据结构,请执行以下操作:
*我能想到的一些合理的理由包括保留项目的顺序和允许具有相同id的重复项目。有关使词典能够满足这些要求的方法,您可能想看看OrderedDict和this answer about duplicate keys。你知道吗
相关问题 更多 >
编程相关推荐