Reputation: 715
I have a list where I need to rename some items. However, let's assume that I don't know the items exact names as they are being added to the list as variables (in this cases I don't know the calendar week number).
myList = ['id', 'brandName', 'EngagedUsers_Week_47', 'EngagedUsers_Week_48', 'EngagedUsers_Week_49', 'EngagedUsers_Week_50', 'Week_47_VS_Week_48', 'Week_48_VS_Week_49', Week_49_VS_Week_50']
I need to convert the above list to:
myNewList = ['id', 'name', 'Week47', 'Week48', 'Week49', 'Week50', '47VS48', '48VS49', '49VS50']
I tried the below, but it would only work if I know the exact list item name :
for item in myList:
if (item != "Users_Week_48"):
myNewList.append("Week48")
else:
myNewList.append(item)
How can I solve my problem? Would this be something to do with going by list index and use regex? Could someone help please (I have very little knowledge on how this could be achieved) thanks!
Upvotes: 0
Views: 523
Reputation: 26211
Trying for something readable and manageable (and extensible if later needed):
def convert(s):
if s == 'brandName':
return 'name'
s = re.sub(r'EngagedUsers', '', s.replace('_', ''))
s = re.sub(r'Week(\d+VS)Week(\d+)', r'\1\2', s)
return s
[convert(s) for s in myList]
# out:
['id',
'name',
'Week47',
'Week48',
'Week49',
'Week50',
'47VS48',
'48VS49',
'49VS50']
Upvotes: 2
Reputation: 1784
Does this suffice?
myList = ['id', 'brandName', 'EngagedUsers_Week_47', 'EngagedUsers_Week_48', 'EngagedUsers_Week_49',
'EngagedUsers_Week_50', 'Week_47_VS_Week_48', 'Week_48_VS_Week_49', 'Week_49_VS_Week_50']
myNewList = []
for item in myList:
if item[:2] == 'id':
myNewList.append(item)
elif item == 'brandName':
myNewList.append('name')
elif item[:12] == 'EngagedUsers':
myNewList.append(item[13:17]+item[-2:])
elif item[:4] == 'Week':
myNewList.append(item[5:7]+item[8:10]+item[-2:])
print(myNewList)
['id', 'name', 'Week47', 'Week48', 'Week49', 'Week50', '47VS48', '48VS49', '49VS50']
Upvotes: 1