I am trying to use defaultdict function here but that does not seem to work
s = {"Ram": "Chennai", "Laxman": "Mumbai", "stephen": "Chennai"}
d = defaultdict(list)
for k, v in s:
d[k].append(v)
sorted(d.items())
print(d)
CodePudding user response:
this should work for you:
from collections import defaultdict
s = {"Ram": "Chennai", "Laxman": "Mumbai", "stephen": "Chennai"}
d = defaultdict(list)
for k, v in s.items():
d[v].append(k)
sorted(d.items())
print(d)
Output:
defaultdict(<class 'list'>, {'Chennai': ['Ram', 'stephen'], 'Mumbai': ['Laxman']})
CodePudding user response:
You are trying to iterate over keys and values simultaneously so you have to use s.items() to get both key-value pairs as tuples: [('Ram', 'Chennai'), ('Laxman', 'Mumbai'), ('stephen', 'Chennai')]
from collections import defaultdict
s = {"Ram": "Chennai", "Laxman": "Mumbai", "stephen": "Chennai"}
d = defaultdict(list)
for k, v in s.items():
d[v].append(k) # Append k instead of v
sorted(d.items())
print(d) # {'Chennai': ['Ram', 'stephen'], 'Mumbai': ['Laxman']}
CodePudding user response:
You were iterating through key and val of a dict without a call to items(), also the new dict should have keys with city name hence had to interchange in v and k in the for loop. Here is the code:
from collections import defaultdict
s = {"Ram": "Chennai", "Laxman": "Mumbai", "stephen": "Chennai"}
d = defaultdict(list)
for k, v in s.items():
d[v].append(k)
sorted(d.items())
print(d)
Output:
defaultdict(<class 'list'>, {'Chennai': ['Ram', 'stephen'], 'Mumbai': ['Laxman']})
