Python如何创建可互换值的列表



我正在使用midi音符,midi数字和频率。在python中,我应该使用什么样的列表来引用任何一个属性并获得其他属性?

例如:

  • 输入:"C3",返回frequency,得到261.6255653006

  • 输入261.6255653006,返回midinumber,得到60

  • 输入:60,返回midinote,得到"C3"

我将使用什么语法、函数、对象或列表类型?

就像我在评论中说的,元组的字典可能是你正在寻找的。例子:

data = {'C3': ('frequency', 261.6255653006), 
    261.6255653006: ('midinumber', 60), 
    60: ('midinote', 'C3'),
}

要验证您的输入,您可以这样做:

input = raw_input()
try:
    key = float(input)
except ValueError:
    key = input
try:
    value = data[key]
except KeyError:
    print "Invalid input. Valid keys are: " + ', '.join(data.keys())
else:
    #input was valid, so value == data[key]

元组像列表一样被索引。然而,它们是不可变的,这意味着您不能更改它们或向它们添加新项。我相信这正是你想要的。

字典是按键索引的,例如data['C3']返回('frequency', 261.6255653006), data['C3'][0]返回'frequency'

最新更新