检查python中是否存在任意列表索引

时间:2013-06-21 18:47:02

标签: python list conditional-statements

请参阅以下代码

if 'COMPONENTS' in prod.keys() and len(prod['COMPONENTS'])>0 and len(prod['COMPONENTS'][0])>1 and len(prod['COMPONENTS'][0][1])>0 and len(prod['COMPONENTS'][0][1][0])>2:
  names = prod['COMPONENTS'][0][1][0][2]

  if type(names) == list and len(names)>0 and type(names[0]) == str:
    #names is proper. Now fetch prices
    if len(prod['COMPONENTS'][0])>3:
      lnames = len(names)
      prices = [prod['COMPONENTS'][0][3][i][2][1][0][1] for i in range(0, lanmes)]

了解我如何使用prod['COMPONENTS'][0][1][0][2]prod['COMPONENTS'][0][3][i][2][1][0][1]prod是一个非常深的嵌套列表。我想检查元素是否存在于这样的索引中。

我找不到任何办法。目前我在if语句中使用了很长的条件。见上文他们有多长。他们太可怕了。

那么有没有办法检查prod是否可以满足['COMPONENTS'][0][3][i][2][1][0][1]索引?

1 个答案:

答案 0 :(得分:2)

最简单的方法就是做到并抓住错误:

try:
    names = prod['COMPONENTS'][0][1][0][2]
except LookupError:
    print "It failed"
    # Do whatever you need to do in case of failure

LookupError将捕获列表中缺少的索引或字典中缺少键。

不用说,你已经找到了真正的问题:你使用的是笨拙且笨拙的数据结构。可以通过以不同方式存储数据来绕过问题。