How to calculate the difference between dictionary and list values?

Question:

I currently have a dictionary and a list, and I would like to subtract the list values from the respective dictionary values (based on index position). This is what I have tried so far:

dict1 = {
    "appel": 3962.00,
    "waspeen": 5018.75,
    "ananas": 3488.16
}

number_fruit = [
    3962,
    5018.74,
    3488.17
]

dictionary_values = list(number_fruit)
list_values = list(dict1.values())

are_values_equal = dictionary_values == list_values

But this only returns True or False if there is a difference.

But what I want to achieve is to return the difference between number_fruit list and dict1 dictionary, only if the difference is not equal to zero..

Here is the expected output:

waspeen : 0.01
ananas : -0.01
Asked By: mightycode Newton

||

Answers:

As mentioned by deceze – dicts do not necessarily have an order, and as such, comparing the values is dangerous.

Here is my attempt at this :

Code:

dict1 = {"appel": 3962.00, "waspeen": 5018.75, "ananas": 3488.16}
number_fruit = [3962, 5018.74, 3488.17]

for k, v in dict1.items():
    dict_index = list(dict1.keys()).index(k)
    if (v - number_fruit[dict_index] != 0):
        print(f"{k} : {round(v - number_fruit[dict_index], 2)}")

Output:

waspeen : 0.01
ananas : -0.01
Answered By: ScottC

Here is a simple solution:

dict1 = {
    "appel": 3962.00,
    "waspeen": 5018.75,
    "ananas": 3488.16
}

number_fruit = [
    3962,
    5018.74,
    3488.17
]

for fruit, a, b in [
    (fruit, value, number_fruit[i])
    for i, (fruit, value) in enumerate(dict1.items())
]:
    print(f'{fruit} : {a} - {b} = {a - b:0.2f}')

Resulting in:

appel : 3962.0 - 3962 = 0.00
waspeen : 5018.75 - 5018.74 = 0.01
ananas : 3488.16 - 3488.17 = -0.01

And it can be even more simple with zip():

for ((fruit, a), b) in zip(dict1.items(), number_fruit):
    print(f'{fruit} : {a} - {b} = {a - b:0.2f}')

And to have just those items whose differences are not 0, you can add an if statement:

for ((fruit, a), b) in zip(dict1.items(), number_fruit):
    if (a - b):
        print(f'{fruit} : {a} - {b} = {a - b:0.2f}')

Resulting in:

waspeen : 5018.75 - 5018.74 = 0.01
ananas : 3488.16 - 3488.17 = -0.01
Answered By: accdias
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.