什么是检查两个列表的python语法(如何使用OR逻辑表达式)

时间:2012-01-23 04:05:53

标签: python list dictionary

我试图检查字典是否存在项目(键和值)这种语法是否正确?

  if item in companies.keys() or companies.values()
       append item

或者是

 if item in (companies.keys() or companies.values())
       append item

或其他什么?

2 个答案:

答案 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.keysdict.values都会创建新的列表(在Python 2.x上)。这是O(N)操作。在列表中查找项目也是O(N)操作,其中N是列表中的项目数。 O(N)大致意味着线性时间越大N就越长。

另一方面,item in some_dict是一个摊销的O(1)操作(无论字典大小如何,平均为常数时间)。 item in some_set也一样。