我试图检查字典是否存在项目(键和值)这种语法是否正确?
if item in companies.keys() or companies.values()
append item
或者是
if item in (companies.keys() or companies.values())
append item
或其他什么?
答案 0 :(得分:2)
怎么样这样试试呢?
if (item in companies.keys()) or (item in companies.values()):
append item
我认为(x in y)
周围的括号是可选的,因为or
运算符的优先级较低。
修改强>
然而,使用item in companies.keys()
会有一些效率低下,特别是在Python 3之前的Python版本中,.keys()
方法迭代所有键并创建所有键的列表。
可以重写相同的测试以使用更快,更惯用的测试,例如:
if (item in companies) or (item in companies.values()):
append item
或者,没有括号(虽然我觉得更难阅读):
if item in companies or item in companies.values():
append item
答案 1 :(得分:0)
如果您检查了大量项目:
companies_values = set(companies.values())
# ...
for item in items:
if item not in companies and item not in companies_values:
# item is not among keys or values of companies
# add item
请勿使用item in companies.keys()
。
dict.keys
和dict.values
都会创建新的列表(在Python 2.x上)。这是O(N)
操作。在列表中查找项目也是O(N)
操作,其中N
是列表中的项目数。 O(N)
大致意味着线性时间越大N
就越长。
另一方面,item in some_dict
是一个摊销的O(1)
操作(无论字典大小如何,平均为常数时间)。 item in some_set
也一样。