Message314080
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. |
|
Date |
User |
Action |
Args |
2018-03-19 07:48:23 | Aristide Grange | set | recipients:
+ Aristide Grange, tim.peters |
2018-03-19 07:48:23 | Aristide Grange | set | messageid: <1521445703.14.0.467229070634.issue33098@psf.upfronthosting.co.za> |
2018-03-19 07:48:23 | Aristide Grange | link | issue33098 messages |
2018-03-19 07:48:22 | Aristide Grange | create | |
|