Reputation: 33
I want to delete a specific element from the values of a single key.
adj_city = {
'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}
for i in adj_city['WA'] :
if(i=='NT'):
del(i)
I am expecting the output as 'WA': ['SA'] but after running the above code I am not getting the output
Upvotes: 1
Views: 66
Reputation: 43169
You could go for
adj_city = {
'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}
# keys where the values need to be removed
dict_keys = ['WA']
# values to be removed
unwanted_values = ['NT']
for key in dict_keys:
try:
adj_city[key] = [item
for item in adj_city[key]
if not item in unwanted_values]
except KeyError:
pass
print(adj_city)
Which yields
{
'WA': ['SA'],
'NT': ['WA', 'SA', 'Q'],
'SA': ['WA', 'NT', 'NSW', 'V'],
'Q': ['NT', 'NSW'],
'NSW': ['Q', 'SA', 'V'],
'V': ['SA', 'NSW']
}
Upvotes: 0
Reputation: 4630
To know why your code doesn't work, try to understand the below code:
arr = [1, 2, 3]
for val in arr:
del val
try:
val
except NameError as e:
print(e)
print(arr)
Output:
name 'val' is not defined
[1, 2, 3]
name 'val' is not defined
[1, 2, 3]
name 'val' is not defined
[1, 2, 3]
Observation:
val
is deleted (i.e. it is not available anymore) and but arr
is untouched.Simply use a list comprehension:
adj_city = {
'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}
adj_city["WA"] = [city for city in adj_city["WA"] if city != 'NT']
assert adj_city == {
'WA': ['SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}
Upvotes: 1
Reputation: 61900
If you want to remove the NT value use remove, never iterate and delete at the same time:
adj_city = {
'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}
adj_city['WA'].remove('NT')
print(adj_city['WA'])
Output
['SA']
Upvotes: 2
Reputation: 82755
Using a list comprehension
Ex:
adj_city = {
'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}
adj_city["WA"] = [i for i in adj_city["WA"] if i != 'NT']
print(adj_city)
Output:
{'NSW': ['Q', 'SA', 'V'],
'NT': ['WA', 'SA', 'Q'],
'Q': ['NT', 'NSW'],
'SA': ['WA', 'NT', 'NSW', 'V'],
'V': ['SA', 'NSW'],
'WA': ['SA']}
Note: Not a good practice to delete an element while iterating the object.
Upvotes: 0