Home > Enterprise >  compare values from dictionary with list
compare values from dictionary with list

Time:10-10

i have a dictionary like this and i want to compare it with a list

dic=
{0: 0,
 1: 1200,
 2: 2400,
 3: 1800,
 4: 2400,
 5: 2400,
 6: 1200,
 7: 1800,
 8: 2400}

list = [0,2,5,7]

How can I create sum over the list with the values from the dictionary?

sum = 0 2400 2400 1800

Thanks!

UPDATE

and how is it if I want to compare it with another dictionary instead of the list? so I need a sum for 0 and 1

dic2=
{Route1: [0, 2, 5, 7]
 Route2: [0, 1, 3, 5, 8, 4}

CodePudding user response:

You can call dict.get passing 0 as default value for each key in the list, then call sum over it:

>>> sum(dic.get(key, 0) for key in list)
Out[5]: 6600

On a side note, don't use list as a variable name as it will mask built-in list constructor.

Or, you can use itemgetter from operator, and pass unpacked list, finally use sum for these values. Be noted that you'll get value error if some keys in list doesn't exist in dictionary:

>>> from operator import itemgetter
>>> sum(itemgetter(*list)(dic))
Out[8]: 6600

CodePudding user response:

The simplest approach is:

dic = {0: 0,
       1: 1200,
       2: 2400,
       3: 1800,
       4: 2400,
       5: 2400,
       6: 1200,
       7: 1800,
       8: 2400}

dic2 = {0: [0, 2, 5, 7],
        1: [0, 1, 3, 5, 8, 4]}

results = {}
for key, value in dic2.items():
    total = 0
    for i in value:
        new_value = dic[i]
        total  = new_value

    results.update({f'Route{key 1}': total})

print(results)

I suggest you always write the simplest code possible. Unnecessarily complex code, is bad code:

Simple is better than complex.

From the Zen of Python.

CodePudding user response:

For the first case, you can use this:

dic= {  0: 0,
        1: 1200,
        2: 2400,
        3: 1800,
        4: 2400,
        5: 2400,
        6: 1200,
        7: 1800,
        8: 2400
    }

lst = [0,2,5,7]

res1 = sum(map(lambda x: dic[x], lst))

print(res1)

# 6600

And for the second case, use list comprehension:

dic= {  0: 0,
        1: 1200,
        2: 2400,
        3: 1800,
        4: 2400,
        5: 2400,
        6: 1200,
        7: 1800,
        8: 2400
    }

dic2 = {'Route1': [0, 2, 5, 7],
        'Route2': [0, 1, 3, 5, 8, 4]}

res2 = [sum(map(lambda x: dic[x], dic2[i])) for i in dic2]

print(res2)

# [6600, 10200]

Or dict comprehension:

dic= {  0: 0,
        1: 1200,
        2: 2400,
        3: 1800,
        4: 2400,
        5: 2400,
        6: 1200,
        7: 1800,
        8: 2400
    }

dic2 = {'Route1': [0, 2, 5, 7],
        'Route2': [0, 1, 3, 5, 8, 4]}

dic3 = {k: sum(map(lambda x: dic[x], dic2[k])) for k, v in dic2.items()}

print(dic3)

# {'Route1': 6600, 'Route2': 10200}
  • Related