2017-09-18 3 views
0

私はかなりの繰り返しのコード行を持っていますが、1つの整数だけ異なっています。リストのインデックス値が1つだけ異なるコードの冗長な行を削除する

def my_function(row):  
    ozone = row[1].text.replace('\xa0', ' ').split(' ')[0] 
    no2 = row[2].text.replace('\xa0', ' ').split(' ')[0] 
    so2 = row[3].text.replace('\xa0', ' ').split(' ')[0] 
    pm10 = row[4].text.replace('\xa0', ' ').split(' ')[0] 
    return {'ozone': ozone, 'no2': no2, 'so2': so2, 'pm10': pm10} 

可能であれば、私は、次のような何かをすることによって、このコードをクリーンアップしたいと思います:

def my_function(row):  
    foo = row[{}].text.replace('\xa0', ' ').split(' ')[0] 
    return {'ozone': foo.format(1), 'no2': foo.format(2), 'so2': foo.format(3), 'pm10': foo.format(4)} 

明らかにstrのフォーマット方法は動作しませんが、うまくいけば、あなたは何をI見ることができますやりたいどのように私はpythonicの方法でこれを行うことができますか?

+0

同じコードをたくさん使うときは、それを関数に入れます。それが彼らのためのものです。 –

答えて

1

あなたはrowのスライス、プロセスを通じて各項目を反復処理し、辞書のキーで結果を圧縮することができます

def my_function(row): 
    keys = ('ozone', 'no2', 'so2', 'pm10') 
    values = [x.text.replace('\xa0', ' ').split(' ')[0] for x in row[1:5]] 
    return dict(zip(keys, values)) 
1

あなたが交換の重複を削除することができますが、私はまだ、同じ数を維持したいです

values = [] 
for i in range(1,5): 
    values.append(row[i].text.replace('\xa0', ' ').split(' ')[0]) 

ozone, no2, so2, pm10 = values 
return {'ozone': ozone, 'no2': no2, 'so2': so2, 'pm10': pm10} 
1

2つの機能に分けることができます.1つは、置換、分割、および戻すことです。そしてあなたが最初に持っていたもう一つ。 2番目のグループにはグループが含まれ、グループ内の各エントリには、行インデックスと、それがマップされるキーが含まれます。

def replace_split_and_return_first(text): 
    return text.replace('\xa0', ' ').split(' ')[0] 

def my_function(row): 
    groups = [(1, 'ozone'), (2, 'no2'), (3, 'so2'), (4, 'pm10')] 
    return {key: replace_split_and_return_first(row[idx].text) for (idx, key) in groups}