- music = {  
- 	"Band 1": { 
- 		"Album A": ["1-Track A1", "1-Track A2", "1-Track A3"], 
- 		"Album B": ["1-Track B1", "1-Track B2", "1-Track B3"], 
- 		"Album C": ["1-Track C1", "1-Track C2", "1-Track C3"] 
- 	}, 
- 	"Band 2": { 
- 		"Album A": ["2-Track A1", "2-Track A2", "2-Track A3"], 
- 		"Album B": ["2-Track B1", "2-Track B2", "2-Track B3"], 
- 		"Album C": ["2-Track C1", "2-Track C2", "2-Track C3"] 
- 	}, 
- 	"Band 3": { 
- 		"Album A": ["3-Track A1", "3-Track A2", "3-Track A3"], 
- 		"Album B": ["3-Track B1", "3-Track B2", "3-Track B3"], 
- 		"Album C": ["3-Track C1", "3-Track C2", "3-Track C3"] 
- 	} 
- } 
-   
- import random 
- def pick_track(music_collection): 
- 	# we must pick a key and look that up if we get a dictionary 
- 	if isinstance(music_collection, dict): 
- 		chosen = music_collection[random.choice(list(music_collection.keys()))] 
- 	else: 
- 		chosen = random.choice(music_collection) 
-   
- 	if isinstance(chosen, str):  # it's a string, so it represents a track 
- 		return chosen 
- 	else:  # it's a collection (list or dict) so we have to pick something from inside it 
- 		return pick_track(chosen) 
-   
-   
- def pick_track2(music_collection): 
- 	if isinstance(music_collection, dict): 
- 		random_key = random.choice(list(music_collection.keys())) 
- 	else: 
- 		random_key = random.randrange(len(music_collection)) 
- 	chosen = music_collection[random_key] 
- 	if isinstance(chosen, str):  
- 		return [random_key, chosen] 
- 	else: 
- 		return [random_key] + pick_track2(chosen) 
-   
- for i in range(5): 
- 	print(pick_track(music)) 
-   
- for i in range(5): 
- 	print("Band: '{}' - Album: '{}' - Track {}: '{}'".format(*pick_track2(music))) 
-   
				bXVzaWMgPSB7IAoJIkJhbmQgMSI6IHsKCQkiQWxidW0gQSI6IFsiMS1UcmFjayBBMSIsICIxLVRyYWNrIEEyIiwgIjEtVHJhY2sgQTMiXSwKCQkiQWxidW0gQiI6IFsiMS1UcmFjayBCMSIsICIxLVRyYWNrIEIyIiwgIjEtVHJhY2sgQjMiXSwKCQkiQWxidW0gQyI6IFsiMS1UcmFjayBDMSIsICIxLVRyYWNrIEMyIiwgIjEtVHJhY2sgQzMiXQoJfSwKCSJCYW5kIDIiOiB7CgkJIkFsYnVtIEEiOiBbIjItVHJhY2sgQTEiLCAiMi1UcmFjayBBMiIsICIyLVRyYWNrIEEzIl0sCgkJIkFsYnVtIEIiOiBbIjItVHJhY2sgQjEiLCAiMi1UcmFjayBCMiIsICIyLVRyYWNrIEIzIl0sCgkJIkFsYnVtIEMiOiBbIjItVHJhY2sgQzEiLCAiMi1UcmFjayBDMiIsICIyLVRyYWNrIEMzIl0KCX0sCgkiQmFuZCAzIjogewoJCSJBbGJ1bSBBIjogWyIzLVRyYWNrIEExIiwgIjMtVHJhY2sgQTIiLCAiMy1UcmFjayBBMyJdLAoJCSJBbGJ1bSBCIjogWyIzLVRyYWNrIEIxIiwgIjMtVHJhY2sgQjIiLCAiMy1UcmFjayBCMyJdLAoJCSJBbGJ1bSBDIjogWyIzLVRyYWNrIEMxIiwgIjMtVHJhY2sgQzIiLCAiMy1UcmFjayBDMyJdCgl9Cn0KCmltcG9ydCByYW5kb20KZGVmIHBpY2tfdHJhY2sobXVzaWNfY29sbGVjdGlvbik6CgkjIHdlIG11c3QgcGljayBhIGtleSBhbmQgbG9vayB0aGF0IHVwIGlmIHdlIGdldCBhIGRpY3Rpb25hcnkKCWlmIGlzaW5zdGFuY2UobXVzaWNfY29sbGVjdGlvbiwgZGljdCk6CgkJY2hvc2VuID0gbXVzaWNfY29sbGVjdGlvbltyYW5kb20uY2hvaWNlKGxpc3QobXVzaWNfY29sbGVjdGlvbi5rZXlzKCkpKV0KCWVsc2U6CgkJY2hvc2VuID0gcmFuZG9tLmNob2ljZShtdXNpY19jb2xsZWN0aW9uKQoJCglpZiBpc2luc3RhbmNlKGNob3Nlbiwgc3RyKTogICMgaXQncyBhIHN0cmluZywgc28gaXQgcmVwcmVzZW50cyBhIHRyYWNrCgkJcmV0dXJuIGNob3NlbgoJZWxzZTogICMgaXQncyBhIGNvbGxlY3Rpb24gKGxpc3Qgb3IgZGljdCkgc28gd2UgaGF2ZSB0byBwaWNrIHNvbWV0aGluZyBmcm9tIGluc2lkZSBpdAoJCXJldHVybiBwaWNrX3RyYWNrKGNob3NlbikKCQkKCQkKZGVmIHBpY2tfdHJhY2syKG11c2ljX2NvbGxlY3Rpb24pOgoJaWYgaXNpbnN0YW5jZShtdXNpY19jb2xsZWN0aW9uLCBkaWN0KToKCQlyYW5kb21fa2V5ID0gcmFuZG9tLmNob2ljZShsaXN0KG11c2ljX2NvbGxlY3Rpb24ua2V5cygpKSkKCWVsc2U6CgkJcmFuZG9tX2tleSA9IHJhbmRvbS5yYW5kcmFuZ2UobGVuKG11c2ljX2NvbGxlY3Rpb24pKQoJY2hvc2VuID0gbXVzaWNfY29sbGVjdGlvbltyYW5kb21fa2V5XQoJaWYgaXNpbnN0YW5jZShjaG9zZW4sIHN0cik6IAoJCXJldHVybiBbcmFuZG9tX2tleSwgY2hvc2VuXQoJZWxzZToKCQlyZXR1cm4gW3JhbmRvbV9rZXldICsgcGlja190cmFjazIoY2hvc2VuKQogICAgICAgIApmb3IgaSBpbiByYW5nZSg1KToKCXByaW50KHBpY2tfdHJhY2sobXVzaWMpKQoJCmZvciBpIGluIHJhbmdlKDUpOgoJcHJpbnQoIkJhbmQ6ICd7fScgLSBBbGJ1bTogJ3t9JyAtIFRyYWNrIHt9OiAne30nIi5mb3JtYXQoKnBpY2tfdHJhY2syKG11c2ljKSkpCg==