我尝试使用列表推导式替换值列表中的多个可能字符串值。我有一个列名列表,这些列名来自于“cursor.description”。
我尝试使用了这个列表推导式;
但这意味着对于未匹配的键,项目会被复制,我会得到;
如果我使用以下代码:
有没有类似Python的方法来解决这个问题,或者说我是过度使用列表推导式了?我确实发现它们很难读懂。
['UNIX_Time', 'col1_MCA', 'col2_MCA', 'col3_MCA', 'col1_MCB', 'col2_MCB', 'col3_MCB']
I then have header_replace
;
{'MCB': 'SourceA', 'MCA': 'SourceB'}
我希望替换列名中header_replace.keys()
对应的字符串值为实际的值。
以下循环是必须要用到的:
headers = []
for header in cursor.description:
replaced = False
for key in header_replace.keys():
if key in header[0]:
headers.append(str.replace(header[0], key, header_replace[key]))
replaced = True
break
if not replaced:
headers.append(header[0])
这将给我正确的输出;
['UNIX_Time', 'col1_SourceA', 'col2_SourceA', 'col3_SourceA', 'col1_SourceB', 'col2_SourceB', 'col3_SourceB']
我尝试使用了这个列表推导式;
[str.replace(i[0],k,header_replace[k]) if k in i[0] else i[0] for k in header_replace.keys() for i in cursor.description]
但这意味着对于未匹配的键,项目会被复制,我会得到;
['UNIX_Time', 'col1_MCA', 'col2_MCA', 'col3_MCA', 'col1_SourceA', 'col2_SourceA', 'col3_SourceA',
'UNIX_Time', 'col1_SourceB', 'col2_SourceB', 'col3_SourceB', 'col1_MCB', 'col2_MCB', 'col3_MCB']
如果我使用以下代码:
[str.replace(i[0],k,header_replace[k]) for k in header_replace.keys() for i in cursor.description if k in i[0]]
@Bakuriu 修正语法
我可以获得正确的替换,但是会失去任何不需要进行字符串替换的项目。
['col1_SourceA', 'col2_SourceA', 'col3_SourceA', 'col1_SourceB', 'col2_SourceB', 'col3_SourceB']
有没有类似Python的方法来解决这个问题,或者说我是过度使用列表推导式了?我确实发现它们很难读懂。
.append
方法。 - sneeucsv.writer()
,通常我只是执行writer.writerow([i[0] for i in cursor.description])
。 - Dave Andersonif
,每次迭代键时都会得到每个元素的副本。 - Dave Andersonyield
那些应该放入列表中的东西,甚至比创建一个空列表并向其中添加更简单。 - RemcoGerlich