I'm trying to add a unique ID to every item in a list and struggling with some strange behaviour I don't understand from Python.
I have this function:
def add_IDs(d):
for x in range(len(d)):
var = d.pop(x)
var['list_id'] = x
d.insert(x, var)
return d
Into which I input this data:
[{'db_number': 1, 'quantity': 15, 'quality': 1},
{'db_number': 1, 'quantity': 20, 'quality': 0},
{'db_number': 1, 'quantity': 20, 'quality': 0},
{'db_number': 1, 'quantity': 80, 'quality': 0},
{'db_number': 2, 'quantity': 4, 'quality': 0}]
I expect this output:
[{'db_number': 1, 'quantity': 15, 'quality': 1, 'list_id': 0},
{'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 1},
{'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 2},
{'db_number': 1, 'quantity': 80, 'quality': 0, 'list_id': 3},
{'db_number': 2, 'quantity': 4, 'quality': 0, 'list_id': 4}]
But instead the second dict in the list, gets 'list_id': 2
instead of 'list_id': 1
[{'db_number': 1, 'quantity': 15, 'quality': 1, 'list_id': 0},
{'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 2},
{'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 2},
{'db_number': 1, 'quantity': 80, 'quality': 0, 'list_id': 3},
{'db_number': 2, 'quantity': 4, 'quality': 0, 'list_id': 4}]
As a test I wrote this:
def add_IDs(d):
for x in range(len(d)):
var = d.pop(x)
var['list_id'] = x
d.insert(x, var)
return d
data2 = [{'db_number': 1, 'quantity': 15, 'quality': 1},
{'db_number': 1, 'quantity': 20, 'quality': 0},
{'db_number': 1, 'quantity': 20, 'quality': 0},
{'db_number': 1, 'quantity': 80, 'quality': 0},
{'db_number': 2, 'quantity': 4, 'quality': 0}]
print(data)
print(data2)
l1 = add_IDs(data)
l2 = add_IDs(data2)
print(l1)
print(l2)
print("")
print('Does data = data2?')
print(data == data2)
print('Does l1 = l2?')
print(l1 == l2)
Which gives this output:
[{'db_number': 1, 'quantity': 15, 'quality': 1}, {'db_number': 1, 'quantity': 20, 'quality': 0}, {'db_number': 1, 'quantity': 20, 'quality': 0}, {'db_number': 1, 'quantity': 80, 'quality': 0}, {'db_number': 2, 'quantity': 4, 'quality': 0}]
[{'db_number': 1, 'quantity': 15, 'quality': 1}, {'db_number': 1, 'quantity': 20, 'quality': 0}, {'db_number': 1, 'quantity': 20, 'quality': 0}, {'db_number': 1, 'quantity': 80, 'quality': 0}, {'db_number': 2, 'quantity': 4, 'quality': 0}]
[{'db_number': 1, 'quantity': 15, 'quality': 1, 'list_id': 0}, {'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 2}, {'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 2}, {'db_number': 1, 'quantity': 80, 'quality': 0, 'list_id': 3}, {'db_number': 2, 'quantity': 4, 'quality': 0, 'list_id': 4}]
[{'db_number': 1, 'quantity': 15, 'quality': 1, 'list_id': 0}, {'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 1}, {'db_number': 1, 'quantity': 20, 'quality': 0, 'list_id': 2}, {'db_number': 1, 'quantity': 80, 'quality': 0, 'list_id': 3}, {'db_number': 2, 'quantity': 4, 'quality': 0, 'list_id': 4}]
Does data = data2?
False
Does l1 = l2?
False
Process finished with exit code 0
As far as I can see, the input data is identical for both, the inbuilt comparison tool tells me the printed values are identical, but the output is still different and the checks say they are different. Can someone shed some light on what I'm missing?