How to sort dictionary values from Highest to lowest?

My question would be how I withdraw winner based on highest score? since u cant sort in dictionaries i tried this with lists, but then name wouldnt appear, only the score...

a = {'name_a':0}
b = {'name_b':0}
c = {'name_c':0}
d = {'name_d':0}
e = {'name_e':0}

print("Each time someone scores a point, the letter of his name is typed in lowercase. If someone loses a point, the letter of his name is typed in uppercase")


score = input('Enter series of charachters indicating who scored a poitn: ')

for i in score:
    if i == 'a':
        a['name_a'] += 1
    if i == 'A':
        a['name_a'] -= 1
    if i == 'b':
        b['name_b'] += 1
    if i == 'B':
        b['name_b'] -= 1
    if i == 'c':
        c['name_c'] += 1
    if i == 'C':
        c['name_c'] -= 1
    if i == 'd':
        d['name_d'] += 1
    if i == 'D':
        d['name_d'] -= 1
    if i == 'e':
        e['name_e'] += 1
    if i == 'E':
        e['name_e'] -= 1

print(a,b,c,d,e)

print('Winner is: ', )

Upvotes: 0

Views: 1083

Answers (4)

dheiberg
dheiberg

Reputation: 1914

you probably want to use a single dict, instead of one for each, like such:

scores = {
    'a': 0,
    'b': 0,
    'c': 0,
    'd': 0,
    'e': 0,
}

And then you can keep track of the highest scoring player as points are calculated:

point_scored = input('Enter series of charachters indicating who scored a point: ')


for i in point_scored:
    if not scores.get(i) is None:
        scores[i] += 1
    elif not scores.get(i.lower()) is None:
        scores[i.lower()] -= 1
    else:
        print(str(i) + ' is not a valid player...')

winner = max(scores, key=scores.get)

print(scores)

print('Winner is ' + winner)

Upvotes: 0

i found the answer

winner = (sorted(d.items(), key = lambda x: int(x[1]), reverse  = True))

Upvotes: 0

joery de vries
joery de vries

Reputation: 11

max_key = ""
max_val = 0

for key, value in d.items():
    if (value > max_val):
        max_val = value
        max_key = key

Is this what you mean?

Upvotes: 0

Shahar
Shahar

Reputation: 21

This will work:

max((i, name) for d in (a,b,c,d,e) for name, i in d.items())[1]

Upvotes: 1

Related Questions