This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Aristide Grange
Recipients Aristide Grange, tim.peters
Date 2018-03-19.07:48:22
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1521445703.14.0.467229070634.issue33098@psf.upfronthosting.co.za>
In-reply-to
Content
My bad... For my reference to Python 2, I relied on my memory only, which starts to vanish. Really sorry about that. Yes, `random.choice(d)` (mostly) fails in Python 2 too, with an error message that I better understand after reading your explanation.

So, in Python 2/3, when `random.choice()` is applied to a dictionary, it draws a random integer i in [0, len(d)[ and tries to return the _value_ `d[i]`. It's quite unexpected, for me at last. According to the doc:

random.choice(seq)
Return a random element from the non-empty sequence seq. If seq is empty, raises IndexError.

In Python 3, evaluating `choice(d.keys())` raises "TypeError: 'dict_keys' object does not support indexing". Shouldn't `choice(d)` _always_ fail with the same error message? I am not sure to see any legitimate use for the current behavior.

With regard to the repeated refusal to hide the fact that `choice`-ing among the keys of a dictionary is a linear operation, I can understand this decision. The general interest does not necessary align with that of an algorithmic teacher which only uses Python as a support language for introducing students to basic / transversal datatypes such as lists, arrays, dictionaries, sets, and prefers to avoid speaking of `dict_keys` and other Python's niceties...

Anyway, thanks a lot for your detailed and patient answer.
History
Date User Action Args
2018-03-19 07:48:23Aristide Grangesetrecipients: + Aristide Grange, tim.peters
2018-03-19 07:48:23Aristide Grangesetmessageid: <1521445703.14.0.467229070634.issue33098@psf.upfronthosting.co.za>
2018-03-19 07:48:23Aristide Grangelinkissue33098 messages
2018-03-19 07:48:22Aristide Grangecreate