I want to append a dictionary germany into a list travel_log.
travel_log = [
{
"country": "France",
"visits": 12,
"cities": ["Paris", "Lille", "Dijon"]
}]
germany = {
"country": "Germany",
"visits": 5,
"cities": ["Berlin", "Hamburg", "Stuttgart"]
}
When I use travel_log = germany, the result is
[{'country': 'France', 'visits': 12, 'cities': ['Paris', 'Lille', 'Dijon']}, 'country', 'visits', 'cities'].
The values in germany disappeared.
But when I use travel_log.append(germany), the result is
[{'country': 'France', 'visits': 12, 'cities': ['Paris', 'Lille', 'Dijon']}, {'country': 'Germany', 'visits': 5, 'cities': ['Berlin', 'Hamburg', 'Stuttgart']}]
This is the correct one.
Why these two results are diffrent?
CodePudding user response:
Because = extends the list with another iterable, and iterating over a dict iterates over the keys (try print(list(germany))).
You'd get the same effect with travel_log.extend(germany).
.append(x) doesn't iterate over x, it just appends it as-is to the list.
CodePudding user response:
The two results are different because = and .append are designed to do completely different things.
.append adds a value to the end of a list. For example:
a = [1, 2, 3]
a.append(4)
print(a)
# => [1, 2, 3, 4]
= adds all the values from another iterable to the end of the list - it does the same as .extend. If you tried to do a = 4 in the example above, it would error as 4 is not an iterable.
However, you are adding a dictionary, and a dictionary is an iterable - iterating over it will iterate over its keys. Hence = here does not error, but instead adds all the keys of the dictionary to the list (without erroring).
