简体   繁体   中英

Getting key values from list outside dictionary

I am trying to calculate a “score” for each key in a dictionary. The values for the key values are in a different list. Simplified example:

I have:

Key_values = ['a': 1, 'b': 2, 'c': 3, 'd': 4]
My_dict = {'player1': ['a', 'd', 'c'], 'player2': ['b', 'a', 'd']}

I want:

Scores = ['player1': 8, 'player2': 7]

You can create it using a dict comprehension:

Key_values = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
My_dict = {'player1': ['a', 'd', 'c'], 'player2': ['b', 'a', 'd']}

scores = {player: sum(Key_values[mark] for mark in marks) for player, marks in My_dict.items()}

print(scores)
# {'player1': 8, 'player2': 7}

Try this:

>>> Key_values = {"a" : 1, "b" : 2, "c": 3, "d" : 4}
>>> My_dict = {"player1":["a", "d", "c"], "player2":["b", "a", "d"]}
>>> Scores= {k: sum(Key_values.get(v_el, 0) for v_el in v) for k,v in My_dict.items()}
>>> Scores
{'player1': 8, 'player2': 7}

Try this: (Updated the syntax in question. key-value pairs are enclosed within curley braces.)

Key_values = {‘a’ : 1, ‘b’ : 2, ‘c’: 3, ‘d’ : 4}
My_dict = {‘player1’=[‘a’, ‘d’, ‘c’], ‘player2’=[‘b’, ‘a’, ‘d’]}
Scores = dict()
for key, value in My_dict.items():
  total = 0
  for val in value:
    total += Key_values[val]
  Scores[key] = total


print(Scores)
   # {‘player1’ : 8, ‘player2: 7}

try this:

   score = {}
    key_values  = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    my_dict = {'player1': ['a', 'c', 'd'], 'player2': ['b', 'a', 'd']}
    scr = 0
    for i in my_dict.keys(): # to get all keys from my_dict
      for j in my_dict[i]: # iterate the value list for key.
        scr += key_values[j]
      score[i] = scr
      scr = 0

    print(score)

You can do it with appropriate dict methods and map, should be the fastest among the ones already posted.

Key_values = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
My_dict = {'player1': ['a', 'd', 'c'], 'player2': ['b', 'a', 'd']}

new_dict = {key:sum(map(Key_values.get,My_dict[key])) for key in My_dict}
print(new_dict)

Output:

{'player1': 8, 'player2': 7}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM