user3646742
user3646742

Reputation: 309

How to get and modify the value of nested dictionary?

I have this kind of dictionary in python:

x = {'test': {1: 2, 2: 4, 3: 5},
     'this': {1: 2, 2: 3, 7: 6},
     'is': {1: 2},
     'something': {90: 2,92:3}}

I want to modify all of the value in the key by whatever value I want. Let's say 100, the methods I tried are below:

counter = 1
print(x)
for key,anotherKey in x.items():
    while counter not in x[key]:
        counter+=1
    while counter in x[key]:
        x[key][counter] = 100
        counter+=1
    counter =0

Which got the result below:

{'test': {1: 100, 2: 100, 3: 100},
 'this': {1: 100, 2: 100, 7: 6},
 'is': {1: 100},
 'something': {90: 100,92: 3}}

I know why this is happening it's because the loop doesn't consider if the differences is more than 1 which in this case in 'this' : where the differences from 2 to 7 is more than 1. However I don't know how to solve this.

Upvotes: 1

Views: 55

Answers (2)

Abdul Fatah
Abdul Fatah

Reputation: 513

You can use dictionary comprehension in this way:

{a: {b:100 for b in d} for (a,d) in x.items()}

Upvotes: -1

jpp
jpp

Reputation: 164703

You can iterate via a nested for loop:

x = {'test': {1: 2, 2: 4, 3: 5},
     'this': {1: 2, 2: 3, 7: 6},
     'is': {1: 2},
     'something': {90: 2,92:3}}

for a in x:
    for b in x[a]:
         x[a][b] = 100

print(x)

{'is': {1: 100},
 'something': {90: 100, 92: 100},
 'test': {1: 100, 2: 100, 3: 100},
 'this': {1: 100, 2: 100, 7: 100}}

Or for a new dictionary you can use a dictionary comprehension:

res = {a: {b: 100 for b in x[a]} for a in x}

Upvotes: 4

Related Questions