On 23/11/16 06:09, monik...@netzero.net wrote: > Can you please explain __getitem__?
__getitem__ is the operator overload for indexing. It is like the __add__() method which overloads the + operator. So if you imple,ent __add__() in your class you can add two instances together using + and Python calls your __add__() method behind the scenes. In the same way when you index a collection object (with []) Python calls the __getitem__ method behind the scenes. So for a dictionary you can access the values of the dictionary by indexing it with a key: d = {1:2,3:4} n = d[1] # calls d.__getitem__(1) resulting in n = 2 > My understanding is that it brings back dictionary's value. > Is this correct? It brings back the value of the provided key. > If so which value does it bring? > Does it look up this value by using a key? Yes. > Where is this key specified in " numbers.__getitem__" ? Either by using indexing like numbers[somekey] or by someone explicitly calling numbers.__getitem__(aKey) In your example below sorted accesses the values using the supplied function (which can be any arbitrary function that accepts an argument and returns a value.) By providing __getitem__ as the input function sorted effectively uses the dictionary values. > The below supposedly brings back dictionary's keys list sorted by values. > But how does it do it? By making the sort key the value of each dictionary key in turn > numbers = {'first': 1, 'second': 2, 'third': 3, 'Fourth': 4} > sorted(numbers, key=numbers.__getitem__) If you try it at the prompt: >>> numbers = {'first': 1, 'second': 2, 'third': 3, 'Fourth': 4} >>> sorted(numbers, key=numbers.__getitem__) ['first', 'second', 'third', 'Fourth'] You see it works. Now try without getitem: >>> sorted(numbers) ['Fourth', 'first', 'second', 'third'] This is sorted by the keys. Now lets use a different sort method to get the values: def getValue(aKey): return numbers[aKey] This uses the more familiar indexing technique to retrieve the value for a given key. We can now use this function with sorted to get the original result: >>> sorted(numbers, key = getValue) ['first', 'second', 'third', 'Fourth'] And we can miss out the separate function definition by using a lambda: >>> sorted(numbers, key = lambda ky: numbers[ky]) ['first', 'second', 'third', 'Fourth'] >>> But the authors of your example have used __getitem__ directly because it's already available...(and the indexing technique calls __getitem__ indirectly anyway). HTH -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor