Why am I getting duplicate values in my output?

Chris Angelico rosuav at gmail.com
Thu Jul 25 22:57:11 EDT 2019


On Fri, Jul 26, 2019 at 12:46 PM DT <dennistobias at gmail.com> wrote:
> def main():
>     ap_list = []
>     ap_dict = {}
>
>         for row in csv_reader:
>             ap_dict['ap_name'] = ap.name
>             ap_dict['ap_ipv4'] = ap.ipv4
>             ap_dict['ap_model'] = ap.model
>             ap_dict['ap_location'] = ap.location
>
>             ap_list.append(ap_dict)
>
>         print(ap_list)
>
>
> When I execute print(ap_list) I get the very last row in the CSV repeated once for every row in the file. I would expect to see a list of ap_dicts, but I do not. When I add print(ap_dict) directly after the ap_list.append(ap_dict) inside the loop I see the correct values. Why is it that the print(ap_list) that happens outside of the for loop is only printing the last item on repeat?
>

You create one dictionary, and then reuse it every time. Appending it
to a list doesn't change it, which means you keep overwriting the same
dictionary every time you go through the loop.

Try creating a new dictionary for each row; in fact, you can simplify
things significantly by using a dict literal (or, more technically,
"dict display") to create a new dictionary with the four fields
already set. You could even do that in the same operation as appending
to the list.

ChrisA



More information about the Python-list mailing list