我有一个字典,我正在存储音乐和弦的数据,以名称为键,以列表中的音调值为值。我想能够排序,如果在所包含的列表中的各种值的基础上。以下是数据示例:
chord_bank = {
'7sus':[0,5,7,10], # c f g bb
'maj7sus':[0,5,7,11], # c f g b
'sus4':[0,5,7], # c f g
'maj':[0,4,7], # c e g
'min':[0,3,7], # c eb g
'sus2':[0,2,7], # c d g
}
基本上,我只想提取列表的键,这很简单:
chords = [*chord_bank.keys()]
print(chords)
# ['7sus', 'maj7sus', 'sus4', 'maj', 'min', 'sus2']
但是我也希望能够对值列表中的给定项进行排序。例如:
chords = sorted(chord_bank.items(), key=lambda kv: kv[1][-1])
print(chords)
# [('sus4', [0, 5, 7]), ('maj', [0, 4, 7]), ('min', [0, 3, 7]), ('sus2', [0, 2, 7]), ('7sus', [0, 5, 7, 10]), ('maj7sus', [0, 5, 7, 11])]
这里的问题是,我得到的不是和弦名称列表,而是元组列表。我知道在我得到元组列表之后,我现在可以使用这样的理解,但是我试着看看是否可以在排序函数本身中完成这一点
我试过从here、here、here和here中寻找可能的解决方案,我也试过像这样一些天真的解决方案,但以我预期的方式失败了:
chords = sorted(chord_bank, key=(chord_bank.get)[1])
# TypeError: 'builtin_function_or_method' object is not subscriptable
以及
chords = sorted(chord_bank.values(), key=lambda kv: kv[1][-1])
# TypeError: 'int' object is not subscriptable
因此,我正在寻找一个解决方案,可以直接返回一个键列表(和弦名称)排序在任何索引的值列表我选择
相关问题 更多 >
编程相关推荐