Переупорядочить словарь случайным образом - PullRequest
2 голосов
/ 09 января 2012

Давайте рассмотрим этот словарь

>>> test = {'to have': True, 'to get': False, 'having': False}

Представьте себе

>>> test.random_order()
{'having': False, 'to get': False, 'to have': True}

Как я могу изменить порядок случайным образом? Должен ли я использовать OrderedDict и random.shuffle? Если да, то как я могу их объединить?

Ответы [ 2 ]

9 голосов
/ 09 января 2012

Просто перетасуйте пары ключ / значение (элементы) и передайте их OrderedDict:

items = test.items()
random.shuffle(items)
OrderedDict(items)
3 голосов
/ 09 января 2012

Ваш вопрос не имеет смысла в строгом смысле - словарь представляет собой отображение из набора ключей в набора значений.Таким образом, у них нет порядка, поскольку у наборов нет порядка.Порядок, который вы видите при печати словаря, является «случайным» и не заслуживающим доверия.Вы можете увидеть случайность в действии, когда вы используете флаг -R с современным Python:

$ python -R -c 'print dict(foo=10, bar=20, baz=30)'
{'baz': 30, 'foo': 10, 'bar': 20}
$ python -R -c 'print dict(foo=10, bar=20, baz=30)'
{'foo': 10, 'baz': 30, 'bar': 20}

Вместо словаря, я думаю, вам нужен список, так как у этой структуры данных есть порядок.Если вы начинаете с dict, то используйте

items = test.items()
random.shuffle(items)

, чтобы получить список перемешанных пар (key, value).Вы можете передать их в OrderedDict, и это даст вам словарь, в котором ключи имеют порядок, связанный с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...