2017-03-03 11 views
0

このコード:どのように私は、コードのこれらの3行は、よりDRYにすることができ

if len(group['elements']) > 0: 
    groups.append(group) 
    group = {'bla': '', 'elements': []} 

は、以下の例では3回繰り返します。私は1つのラインでそれを作っていきたいです。それは可能ですか?どうすればいいですか?

collection_of_items = [ 
    ['strong', 'a', ['a'], '', 'strong', ['a'], ['a'], 'a', 'a', [], ''], 
    ['strong', 'a', ['a'], '', 'strong', 'a'] 
] 

groups = [] 

for items in collection_of_items: 
    group = {'bla': '', 'elements': []} 
    for item in items: 
     if hasattr(item, 'lower'): 
      if item == 'strong': 
       group['bla'] = item 
      elif item =='a': 
       group['elements'].append(item) 
      elif item == '': 
       # Make it DRY <--------------------------------------- 
       if len(group['elements']) > 0: 
        groups.append(group) 
        group = {'bla': '', 'elements': []} 
     else: 
      if 'a' in item: 
       group['elements'].append(item[0]) 
      else: 
       # Make it DRY <--------------------------------------- 
       if len(group['elements']) > 0: 
        groups.append(group) 
        group = {'bla': '', 'elements': []} 

    # Make it DRY <---------------------------------------  
    if len(group['elements']) > 0: 
       groups.append(group) 
       group = {'bla': '', 'elements': []} 

print(groups) 

これら3行を変更

注:サンプルコードの構造以外のものを行いますがミスを

申し訳

を変更することはできません。

+1

first-things-first:*インデント用に4つのスペースを使用する*。しかし、ええ、関数でそれをラップすることはできませんか? –

+0

すみません。実際に私はオンラインideを使用しました。そのため2スペースです。今更新されました –

答えて

1

このコードを関数に入れて、いつでも呼び出すことができます。しかし、真剣に、4スペースインデント。

collection_of_items = [ 
    ['strong', 'a', ['a'], '', 'strong', ['a'], ['a'], 'a', 'a', [], ''], 
    ['strong', 'a', ['a'], '', 'strong', 'a'] 
] 

groups = [] 

def my_func(g): 
    if len(g['elements']) > 0: 
    groups.append(g) 
    g = {'bla': '', 'elements': []} 
    return g 

for items in collection_of_items: 
    group = {'bla': '', 'elements': []} 
    for item in items: 
    if hasattr(item, 'lower'): 
     if item == 'strong': 
     group['bla'] = item 
     elif item =='a': 
     group['elements'].append(item) 
     elif item == '': 
     group = my_func(group) 
    else: 
     if 'a' in item: 
     group['elements'].append(item[0]) 
     else: 
     group = my_func(group) 

    group = my_func(group) 

print(groups) 
+0

このコード全体が別の関数の中に含まれています –

+0

'cllection_of_items:'のループ内のすべてのコードを意味しますか? – ODiogoSilva

+0

私はこの全体のコードが別の関数の中にあることを意味しました。 'def hello: //コードはここにあります' –

関連する問題