Baobab1988
Baobab1988

Reputation: 715

Rename items on python list by list index

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

Answers (2)

Pierre D
Pierre D

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

sai
sai

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

Related Questions