I was trying to use a list comprehension to replace multiple possible string values in a list of values.

I have a list of column names which are taken from a `cursor.description`;

```
['UNIX_Time', 'col1_MCA', 'col2_MCA', 'col3_MCA', 'col1_MCB', 'col2_MCB', 'col3_MCB']

```

I then have `header_replace`;

```
{'MCB': 'SourceA', 'MCA': 'SourceB'}

```

I would like to replace the string values for `header_replace.keys()` found within the column names with the values.

I have had to use the following loop;

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

```

Which gives me the correct output;

```
['UNIX_Time', 'col1_SourceA', 'col2_SourceA', 'col3_SourceA', 'col1_SourceB', 'col2_SourceB', 'col3_SourceB']

```

I tried using this list comprehension;

```
[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]

```

But it meant that items were duplicated for the unmatched keys and I would get;

```
['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']

```

But if instead I use;

```
[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 fixed syntax*

I would get the correct replacement but then loose any items that didn't need to have an string replacement.

```
['col1_SourceA', 'col2_SourceA', 'col3_SourceA', 'col1_SourceB', 'col2_SourceB', 'col3_SourceB']

```

Is there a pythonesque way of doing this or am I over stretching list comprehensions? I certainly find them hard to read.