[Tutor] AttributeError,

Steven D'Aprano steve at pearwood.info
Wed Aug 12 04:01:45 CEST 2015


On Tue, Aug 11, 2015 at 04:24:39PM -0700, Ltc Hotspot wrote:
> Hi Everyone,
> 
> Why is there an AttributeError, line 12, below : 'tuple' object has no
> attribute 'sort'?

Haven't I see this exact same question, complete with solutions, on the 
python-list mailing list? 

The answer found there is that you are trying to sort the wrong value. 
You are trying to sort an immutable (that is, unchangeable) (key, value) 
tuple, which includes one string and one number. And then you ignore the 
sorted result!

You have:

    ncount = (key,val)
    ncount.sort(reverse=True)
    print key,val


Sorting (key, val) cannot work, because that is an immutable tuple. 
Turning it into a list [key, val] now makes it sortable, but that 
doesn't do what you want: Python 2 always sorts ints ahead of strings, 
regardless of their actual values. But even if you did meaningfully sort 
the list [key, val], having done so you don't look at the results, but 
print the key and val variables instead, which are unchanged.

Changing the order of items in a list does not, and can not, change the 
variables that were used to build that list.

If that is not clear, study this example:

py> a = 999
py> b = 1
py> alist = [a, b]  # construct a list from a and b
py> print alist
[999, 1]
py> alist.sort()  # change the order of items in the list
py> print alist
[1, 999]
py> print a, b  # have a and b changed?
999 1


The actual solution needed is, I think, sorting the entire collection:

items = sorted(count.items())
for key, val in items:
    print key,val



-- 
Steve


More information about the Tutor mailing list