How to randomize a dictionairy

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Vista1337
:warning: Old Version Published before Godot 3 was released.

Hey guys,

I am making a sort of quiz game, and i am extracting the questions and the anwsers from a dictionary, but i cant seem to find a way to randomize que anwsers, causing the problem of having the correct anwser always in the same button.

eextends Node2D
onready var lbl_question=get_node("lbl_question")
onready var lbl_answer1=get_node("lbl_answer1")
onready var lbl_answer2=get_node("lbl_answer2")
onready var lbl_answer3=get_node("lbl_answer3")
onready var lbl_answer4=get_node("lbl_answer4")

var dict = {}
var i
var keys
var can=0

func _ready():
    set_fixed_process(true)
    set_process_input(true)
    var file = File.new()
    file.open("res://Questions/test3.json", file.READ)
    var text = file.get_as_text()
    dict.parse_json(text)
    file.close()
    keys = dict.keys()
    i = 0
    generate_table()
    

func _on_Voltar_pressed():
    get_tree().change_scene('res://Scenes/MenuScene.tscn')
    pass 

func _on_lbl_answer1_pressed():
	i += 1
	generate_table()

func _on_lbl_answer2_pressed():
	i += 1
	generate_table()

func _on_lbl_answer3_pressed():
	i += 1
	generate_table()

func _on_lbl_answer4_pressed():
	i += 1
	generate_table()

func generate_table():
    if(i>=dict.size()):
         get_node("CanvasLayer/Control/ProgressBar").set_value(100)
         get_tree().set_pause(true)
    else:
    	var k = dict[keys[i]]
    #correct_answer=k["res_c"]
    	lbl_question.set_text(k["questions"])
    	lbl_answer1.set_text(k["res_c"])
    	lbl_answer2.set_text(k["res_e1"])
    	lbl_answer3.set_text(k["res_e2"])
    	lbl_answer4.set_text(k["res_e3"])


func _fixed_process(delta):
	get_node("CanvasLayer/Control/ProgressBar").set_value(can)
	can+=delta*4

Please fix your code formatting. Indent all lines by 4 spaces, and they’ll appear as code and the underscores won’t be treated as italics.

like this
    and this

kidscancode | 2017-11-28 01:24

:bust_in_silhouette: Reply From: volzhs
func generate_table():
    if(i>=dict.size()):
         get_node("CanvasLayer/Control/ProgressBar").set_value(100)
         get_tree().set_pause(true)
    else:
        var k = dict[keys[i]]
        #correct_answer=k["res_c"]
        lbl_question.set_text(k["questions"])

        # make keys
        var keys = ["res_c", "res_e1", "res_e2", "res_e3"]
        # randomize it
        randomzie()
        for i in range(keys.size()):
            var random_index = randi() % keys.size()
            var k1 = keys[i]
            var k2 = keys[random_index]
            keys[i] = k2
            keys[random_index] = k1
        # use randomzied key list
        lbl_answer1.set_text(k[keys[0]])
        lbl_answer2.set_text(k[keys[1]])
        lbl_answer3.set_text(k[keys[2]])
        lbl_answer4.set_text(k[keys[3]])

It works, thanks!

Vista1337 | 2017-11-28 15:20