Перетасовка определенных значений в словаре (Python 3.5)

Я пишу детектив об убийстве-очень похоже на Clue. Я использую словари для хранения всей моей информации. Мой вопрос: есть ли способ перетасовать словарные значения, которые извлекают из заданного диапазона целых чисел? Я хочу, чтобы каждая игра перетасовывала определенные значения в словарях при запуске новой игры. Сейчас я сосредоточен на размещении персонажей…Я пытаюсь найти лучший способ перетасовать местоположения персонажей после каждой игры (locations[current_room][«char»]. Как только я пойму, как это сделать, я хочу применить это к куче других аспектов игры-с идеей создания совершенно новой тайны, чтобы решить каждую игру. Любые предложения приветствуются!

Редактировать
Спасибо за ответы! Я не пытаюсь рандомизировать весь мой словарь, просто меняю значения определенных ключей в каждой игре. Я думаю, что мне нужно решить эту проблему другим способом. Я обновлю этот пост, когда все будет работать.

Окончательное редактирование я изменяю значение определенных ключей, которые я хочу «перетасовать», редактируя словарь. локации[1][«char»] = случайные.выбор ([0,1,2]), а затем изменение других значений на основе ряда операторов IF из результата в случайный.выбор. Еще раз спасибо за помощь.

locations = {
1: {"name": "bedroom",
    "msg": "There is a painting on the wall. nThe window looks out into the garden.",
    "char": 2,
    "item": "matches",
    "west": 2},
2: {"name": "living room",
    "msg" : "The room is freezing cold. The fireplace is empty.",
    "char": 1,
    "Item": "firewood",
    "east": 1},
}

characters = {
1: {"name": "doctor crichton",
    "msg": "A tall, handsome archeologist home from a dig in Africa."},
2: {"name": "the widow",
    "msg": "An beautiful woman with a deep air of sadness."},
}   
current_room = 1

current_char = locations[current_room]["char"]

def status():
    """updates player on info on current room"""
    print("You are in the " + locations[current_room]["name"])
    char_status()

def char_status():
    """compiles character infomation in current room"""
    if current_char > 0:
        char_room_info()
    else:
        print("nThis room is empty.")

def char_room_info():
    """NPC behavior in each room"""
    print(characters[current_char]["name"].title() + " is in the room with you.")

status()

2 ответа

  1. Словари Python неупорядочены, поэтому я не вижу, почему вы хотите «перетасовать» их. Если вы хотите выбрать случайные строки внутри дикт, возможно, вы могли бы использовать список, чтобы обернуть этот словарь для простоты.

    Вот так:

    Locations = [ {"name": "bedroom...}, {"name": "livingroom"...},...]

    Я думаю, вы поняли. Так что теперь, чтобы получить к ним доступ:

    Locations[random.rand]["name"]

    Также вы можете использовать это:

    random.choice(locations.keys()) 
    

    Что гораздо проще.

  2. Если Python3.x затем сделать:

    import random
    random.choice(list(someDictionary.keys()))
    

    Если Python2.x затем сделать:

    import random
    random.choice(someDictionary.keys())