2016-07-01 5 views
0

私は印刷カテゴリツリー(サブカテゴリを持つメインカテゴリ)を試していますが、私は無限レベルの深さまで準備が整う洗練されたソリューションに問題があります。ループステートメントはマルチレベルの深さに対応しています

私が持っているこの瞬間:

cat_id = '31' 
cat = prestashop.get('categories', options={'display':'full', 'filter[id]':'[' + cat_id + ']'})['categories']['category']['associations']['categories']['category'] 

''' 
cat returns dictionary: 
cat [ 
    {'id': '32'}, 
    {'id': '37'}, 
    {'id': '48'}, 
    {'id': '52'}, 
    {'id': '54'}, 
    {'id': '57'}, 
    {'id': '58'}, 
    {'id': '59'}, 
    {'id': '1068'} 
] 
''' 

for c in cat: 
    print 'Level 2: ' + c['id'] 
    try: 
     cat = prestashop.get('categories', options={'display':'full', 'filter[id]':'[' + c['id'] + ']'})['categories']['category']['associations']['categories']['category'] 
     for c in cat: 
      print 'Level 3: ' + c['id'] 
      try: 
       cat = prestashop.get('categories', options={'display':'full', 'filter[id]':'[' + c['id'] + ']'})['categories']['category']['associations']['categories']['category'] 
       for c in cat: 
        print 'Level 4: ' + c['id'] 
        try: 
         cat = prestashop.get('categories', options={'display':'full', 'filter[id]':'[' + c['id'] + ']'})['categories']['category']['associations']['categories']['category'] 
         for c in cat: 
          print 'Level 5: ' + c['id'] 
        except: 
         pass 
      except: 
       pass 
    except: 
     pass 

ご覧のとおり、私のコードの有効性は、私が手動で入力しますレベルに依存します。それは貧弱な解決策ですが、私はこの瞬間にできることがあります。

どのようにして無限水準(レベル5,6,7,8,9,10,11,12 ...)に対応できるようにコードを調整し、メンテナンスフリーにすることができますか?

結果:

Level 2: 32 
    Level 3: 33 
    Level 3: 1178 
Level 2: 37 
    Level 3: 1201 
    Level 3: 38 
    Level 3: 39 
    Level 3: 40 
     Level 4: 1020 
     Level 4: 41 
     Level 4: 42 
    Level 3: 43 
     Level 4: 1092 
     Level 4: 1093 
     Level 4: 1094 
     Level 4: 1095 
    Level 3: 1024 
     Level 4: 44 
     Level 4: 45 
     Level 4: 1179 
Level 2: 48 
    Level 3: 49 
    Level 3: 50 
    Level 3: 51 
    Level 3: 1128 
    Level 3: 1067 
    Level 3: 1133 
Level 2: 52 
    Level 3: 53 
    Level 3: 1200 
Level 2: 54 
    Level 3: 55 
    Level 3: 56 
    Level 3: 1202 
Level 2: 57 
Level 2: 58 
Level 2: 59 
    Level 3: 60 
    Level 3: 61 
Level 2: 1068 

答えて

0

私はPrestaShopのとはよく知っていないが、あなたは、再帰関数を試してみましたか?

def print_levels(cat, level = 2): 
    try: 
     for c in cat: 
      print((" " * level) + "Level {0}: {1}\n".format(level,c['id'])) 
      new_cat = prestashop.get('categories', options={'display':'full', 'filter[id]':'[' + c['id'] + ']'})['categories']['category']['associations']['categories']['category'] 
      if new_cat: 
       print_levels(new_cat, level + 1) 
      else: 
       return 
    except: 
     return 
cat_id = '31' 
cat = prestashop.get('categories', options={'display':'full', 'filter[id]':'[' + cat_id + ']'})['categories']['category']['associations']['categories']['category'] 
print_levels(cat) 
+0

残念ながら、正しく動作しません。それは、レベル '返し2:32 レベル3:33 レベル2:37 レベル3:1201 レベル2:48 レベル3:49 レベル2:52 レベル3:53 レベル2:54 レベル3 :55 レベル2:57'。 Prestaとは思えませんが、多次元配列です。 – user3041764

関連する問題