Я пытался использовать понимание списка, чтобы заменить несколько возможных строковых значений в списке значений.Python Вложенное представление списка с If Eles
У меня есть список имен столбцов, которые взяты из cursor.description
;
['UNIX_Time', 'col1_MCA', 'col2_MCA', 'col3_MCA', 'col1_MCB', 'col2_MCB', 'col3_MCB']
У меня тогда 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']
Есть ли питонесский способ сделать это, или я над разборчивыми списками? Я, конечно, их трудно читать.
Что вы имеете в виду 'output'? Содержимое 'заголовков'? – Bach
Я придерживаюсь циклов и избегаю списков. Мое эмпирическое правило состоит в том, что, если вы делаете больше, чем одно в понимании, его, вероятно, лучше всего расширять в цикл с помощью .append. – sneeu
'cursor.description' содержит список строк. 'header [0]' содержит один символ. Это специально? – Bach