Sandeep Pandey
Sandeep Pandey

Reputation: 384

Replacing parts of string from values in dict in python

I have a dictionary in python e.g -

partitions = {'train': ['data/xyz/id-1', 'data/xyz/id-2', 'data/xyz/id-3',......], 
               'validation': ['data/pqr/id-4','data/pqr/id-5',.......]}

I want to replace 'data/xyz ' to 'samples/folder1' for all the values of the key 'train'.

the new values will be

samples/folder1/id-1, samples/folder1/id-2, samples/folder1/id-3 etc

similarly , 'data/pqr' to 'samples/test' for all the values of the key 'validation'.

I am unable to figure out how to do it in a concise way. Any help will be appreciated.

Upvotes: 0

Views: 52

Answers (2)

Mehdi Mostafavi
Mehdi Mostafavi

Reputation: 880

Using simple loop and replace for strings:

partitions = {'train': ['data/xyz/id-1', 'data/xyz/id-2', 'data/xyz/id-3'], 
               'validation': ['data/pqr/id-4','data/pqr/id-5']}
replaces = {'train' : ['samples/folder1', 'data/xyz'] , 'validation' : ['samples/test','data/pqr']}
for key , value in partitions.items():
    temp = []
    for v in value:
        temp.append(v.replace(replaces[key][1], replaces[key][0]))
    partitions[key] = temp
print(partitions)

Upvotes: 2

Chris Doyle
Chris Doyle

Reputation: 12027

These are just lists assigned to keys, so you could use a list comprehension to rebuild the list and replacing the values in the strings.

partitions = {
    'train': ['data/xyz/id-1', 'data/xyz/id-2', 'data/xyz/id-3'],
    'validation': ['data/pqr/id-4', 'data/pqr/id-5']
}

print(partitions)
partitions['train'] = [value.replace('data/xyz', 'samples/folder1') for value in partitions['train']]
partitions['validation'] = [value.replace('data/pqr', 'samples/test') for value in partitions['validation']]
print(partitions)

OUTPUT

{'train': ['data/xyz/id-1', 'data/xyz/id-2', 'data/xyz/id-3'], 'validation': ['data/pqr/id-4', 'data/pqr/id-5']}
{'train': ['samples/folder1/id-1', 'samples/folder1/id-2', 'samples/folder1/id-3'], 'validation': ['samples/test/id-4', 'samples/test/id-5']}

Upvotes: 2

Related Questions