Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除仅相差一个列表索引值的冗余代码行_Python - Fatal编程技术网

Python 删除仅相差一个列表索引值的冗余代码行

Python 删除仅相差一个列表索引值的冗余代码行,python,Python,我有许多代码行,它们是非常重复的,只相差一个整数 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.rep

我有许多代码行,它们是非常重复的,只相差一个整数

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格式的方法不起作用,但希望你能看到我的目标。如何以pythonic的方式实现这一点?

您可以遍历
行的一部分,处理每个项目,并使用字典键压缩结果:

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))

您可以遍历
行的一部分
,处理每个项目并使用字典键压缩结果:

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))

您可以删除替换的副本,但为了可读性,我仍然保留相同的行数

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}   

您可以删除替换的副本,但为了可读性,我仍然保留相同的行数

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}   

您可以拆分为两个函数,一个执行替换、拆分和返回。还有你最初拥有的另一个。第二个包含组,组中的每个条目都包含行索引及其映射到的键

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}

您可以拆分为两个函数,一个执行替换、拆分和返回。还有你最初拥有的另一个。第二个包含组,组中的每个条目都包含行索引及其映射到的键

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}

当你经常使用同一段代码时,你就把它放在一个函数中。这就是它们的用途。当你经常使用同一段代码时,你就把它放在一个函数中。这就是他们的目的。