尝试在随机列表上循环并将变量作为lis

2024-05-18 07:13:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着循环一组列表和听写,从中提取正确的信息, 应该像这样运行:

从音乐中随机获取,如果random是一个列表,那么打印列表,如果列表包含dict print dict

这是我迷茫之前所得到的!请帮帮一个笨蛋!你知道吗

import random
music = ['Band1', 'Band2', 'Band3', 'Band4']
Band1 = ['Album1']
Band2 = ['Album2']
Band3 = ['Album3']
Band4 = ['Album4']
Album1 = {
    "01": 'Track1', "02": 'Track2', "03": 'Track3', "04": 'Track4',
    "05": 'Track5', "06": 'Track6', "07": 'Track7', "08": 'Track8',
    "09": 'Track9', "10": 'Track10', "11": 'Track11'}

i = random.choice(music)
if isinstance(i, list):
    print('is instance')

Tags: import信息列表音乐musicrandomdict笨蛋
3条回答

当我调试这个代码时,我得到的是字符串“I”。因此,首先必须使用globals函数按名称获取变量。你知道吗

此代码可以帮助您:

import random
music = ['Band1', 'Band2', 'Band3', 'Band4']
Band1 = ['Album1']
Band2 = ['Album2']
Band3 = ['Album3']
Band4 = ['Album4']
Album1 = {
    "01": 'Track1', "02": 'Track2', "03": 'Track3', "04": 'Track4',
    "05": 'Track5', "06": 'Track6', "07": 'Track7', "08": 'Track8',
    "09": 'Track9', "10": 'Track10', "11": 'Track11'}
Album2 = []
Album3 = ""
Album4 = 0

i = random.choice(music)
print i
#val =  eval(i)[0]
#print type(eval(val))

val2 = globals()[i][0]
print type(globals()[val2])

我建议采用不同的数据结构:

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"]
                     }
         }

这是一个乐队字典(键:乐队名称),其中每个乐队是一个包含专辑的字典(键:专辑名称),其中每个专辑是一个包含曲目名称的列表(索引:曲目编号-1)。你知道吗

然后我们可以假设我们的数据结构只包含字典、列表和字符串。我们需要一个函数来选择一个随机轨迹,即一个字符串。你知道吗

这里有一个递归方法。如果需要的话,它还可以调整为返回找到轨迹的键和索引。它也有任何嵌套深度的能力,所以如果你想按国家或语言或流派等组合乐队,这将是没有问题的。你知道吗

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)

现在我们使用这种方法,例如打印10个随机轨道:

for i in range(5):
    print(pick_track(music))

这可能会输出以下示例:

1-Track C1
2-Track C3
2-Track A3
3-Track A3
2-Track B1

更新:

你还想得到一首曲目所在的键和索引,即乐队名称、专辑名称和曲目编号?没问题,这里有一个修改过的函数:

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("Band: '{}' - Album: '{}' - Track {}: '{}'".format(*pick_track2(music)))

输出示例:

Band: 'Band 1' - Album: 'Album C' - Track 1: '1-Track C2'
Band: 'Band 2' - Album: 'Album B' - Track 0: '2-Track B1'
Band: 'Band 1' - Album: 'Album B' - Track 0: '1-Track B1'
Band: 'Band 3' - Album: 'Album B' - Track 2: '3-Track B3'
Band: 'Band 3' - Album: 'Album B' - Track 2: '3-Track B3'

See this code running on ideone.com

扭曲顺序并在列表中使用实际变量(而不是它们的名称作为字符串)应该可以让您开始:

Album1 = {
    "01": 'Track1', "02": 'Track2', "03": 'Track3', "04": 'Track4',
    "05": 'Track5', "06": 'Track6', "07": 'Track7', "08": 'Track8',
    "09": 'Track9', "10": 'Track10', "11": 'Track11'
}
Album2 = []
Album3 = ""
Album4 = 0
Band1 = [Album1]
Band2 = [Album2]
Band3 = [Album3]
Band4 = [Album4]
music = [Band1, Band2, Band3, Band4]

相关问题 更多 >