-1

See My code below:

import operator
mydict = {'carl': 4,
          'alan': 2,
          'bob': 1,
          'danny': 3}

for i in sorted(mydict,key=operator.itemgetter(1),reverse=True):
    print ("%s: %d" % (i,mydict[i]))

I got output:

bob: 1
alan: 2
carl: 4
danny: 3

I am expecting:

bob: 1
alan: 2
danny: 3
carl: 4

What's wrong here?

martineau
  • 119,623
  • 25
  • 170
  • 301
Chelseajcole
  • 487
  • 1
  • 9
  • 16
  • 1
    if you're trying to sort by values, you'll need to pass `mydict.items()`, and modify your loop to take two loop variables. – cs95 Apr 13 '18 at 20:15

2 Answers2

7

You're sorting the people's names by the second letter of their name, not sorting key-value pairs by value. 'carl' and 'danny' both have second letter 'a'.

If you want a dict's key-value pairs, use its items():

for k, v in sorted(mydict.items(), key=operator.itemgetter(1)):
    print('{}: {}'.format(k, v))
user2357112
  • 260,549
  • 28
  • 431
  • 505
2

You will need to pass mydict.items(). This works:

import operator
mydict = {'carl': 4,
          'alan': 2,
          'bob': 1,
          'danny': 3}

# for i in sorted(mydict,key=operator.itemgetter(1),reverse=True):
#     print ("%s: %d" % (i,mydict[i]))

sorted_x = sorted(mydict.items(), key=operator.itemgetter(1))
print(sorted_x)
Abhishek Keshri
  • 3,074
  • 14
  • 31