Home > Software engineering >  How do I use a loop statement to change specific values in a dictionary given an if statement?
How do I use a loop statement to change specific values in a dictionary given an if statement?

Time:10-14

If I have a dictionary with each key having a list of values for example:

my_dict={'key1':[1, 6, 7, -9], 'key2':[2, 5, 10, -5,], 'key3':[-8, 1, -2, 6]}

And I want to create a loop statement to go through each value within the lists and change the value within my dictionary to 0 for each negative value. I can create a loop statement to go through each value and check if the value is negative but I can't figure out how to amend the dictionary directly:

for keys, values in my_dict.items():
    for value in values:
        if value < 0:
            value=0

How to I alter that last line (or do I have to change more lines) to be able to amend my dictionary directly to replace the negative values with 0?

Thanks in advance

CodePudding user response:

One approach is to iterate over the .items of the dictionary and override each value directly using enumerate to keep track of the indices:

my_dict={'key1':[1, 6, 7, -9], 'key2':[2, 5, 10, -5,], 'key3':[-8, 1, -2, 6]}

for key, value in my_dict.items():
    for i, val in enumerate(value):
        value[i] = 0 if val < 0 else val

print(my_dict)

Output

{'key1': [1, 6, 7, 0], 'key2': [2, 5, 10, 0], 'key3': [0, 1, 0, 6]}

Alternative using the slicing operator and a list comprehension:

for key, value in my_dict.items():
    value[:] = [0 if val < 0 else val for val in value]

Some other useful resources:

CodePudding user response:

Using max in a nested comprehension:

my_dict = {k: [max(0, v) for v in vals] for k, vals in my_dict.items()}
  • Related