Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字典中搜索隐藏的键值对_Python_Dictionary_Iterator_Keyvaluepair - Fatal编程技术网

Python 在字典中搜索隐藏的键值对

Python 在字典中搜索隐藏的键值对,python,dictionary,iterator,keyvaluepair,Python,Dictionary,Iterator,Keyvaluepair,我需要从字典中提取非常特定的键值对。这些关键点是整数,并且这些值针对特定数量的关键点重复,这会有所不同。 我必须提取重复值的最后一个键值对。因此,在这种情况下,我需要提取键值对: 42: ['e '] 85: ['dis '] 88: ['d '] 95: ['e '] 某个值出现的次数是随机的。一个值以后可能会再次出现,就像当前的值['e']一样,因此我需要提取它两次 这是我在这里使用的口述语类型的示例: notes_dict = { 0: ['e '], 1: ['e '

我需要从字典中提取非常特定的键值对。这些关键点是整数,并且这些值针对特定数量的关键点重复,这会有所不同。 我必须提取重复值的最后一个键值对。因此,在这种情况下,我需要提取键值对:

42: ['e ']
85: ['dis ']
88: ['d ']
95: ['e ']
某个值出现的次数是随机的。一个值以后可能会再次出现,就像当前的值['e']一样,因此我需要提取它两次

这是我在这里使用的口述语类型的示例:

notes_dict = {
    0: ['e '], 
    1: ['e '], 
    2: ['e '], 
    3: ['e '], 
    #(...)
    40: ['e '], 
    41: ['e '], 
    42: ['e '], 
    43: ['dis '], 
    44: ['dis '], 
    45: ['dis '],
    #(...)
    83: ['dis '], 
    84: ['dis '], 
    85: ['dis '], 
    86: ['d '], 
    87: ['d '], 
    88: ['d '], 
    89: ['e '], 
    90: ['e '], 
    91: ['e '], 
    92: ['e '], 
    93: ['e '], 
    94: ['e '], 
    95: ['e ']
}

背后的想法是:这本词典包含了在给定时间播放哪个音符的信息。我需要将此过程自动化,以便尝试绘制一张非常简单的乐谱。

这可能适合您:

from itertools import groupby
notes_dict = {
    0: ['e '],
    1: ['e '],
    2: ['e '],
    3: ['e '],
    40: ['e '],
    41: ['e '],
    42: ['e '],
    43: ['dis '],
    44: ['dis '],
    45: ['dis '],
    83: ['dis '],
    84: ['dis '],
    85: ['dis '],
    86: ['d '],
    87: ['d '],
    88: ['d '],
    89: ['e '],
    90: ['e '],
    91: ['e '],
    92: ['e '],
    93: ['e '],
    94: ['e '],
    95: ['e ']
}

for k, g in groupby(sorted(notes_dict),
                    key=notes_dict.get):
    print '{}: {}'.format(list(g)[-1], k)

用dict来表示这些可能是个坏主意,因为字典内部并不是按键排序的。你最好有一个元组列表之类的东西。甚至可能是一个熊猫系列

无论如何,您可能可以使用标准库的
itertools
来执行您想要的操作:

导入itertools >>>注释=注释项()中k,v的排序((k,v[0])) >>>dict(itertools.groupby(notes,lambda x:x[1])中g的列表(g)[-1] {42:e',85:dis',88:d',95:e'}
另外,有一些很好的库可以用来处理音符和乐谱,你可以看看,例如。

是的,我想你应该把它变成字符串列表:

pitch = ['e', 'e', ..., 'dis', ..., 'd', ..., 'e', ... 'e', 'dummy']
现在,输出更像

print_list = [(i, pitch[i]) for i in range(len(pitch)) if pitch[i] != pitch[i+1])

但是,如果这是使用词典的唯一方法,那么我建议您使用适用于当前格式的早期答案。

欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布代码并准确描述问题之前,我们无法有效地帮助您。StackOverflow不是编码或教程服务。也就是说,你的问题是什么?似乎需要在注释更改之前获取每个组的最后一个值。用字典来解释这件事是很奇怪的;时间序列通常是一个序列(值的有序序列、元组或列表)。您是对的:我需要在注释更改之前获取每个组的最后一个值。那么,你是说我应该把我的字典变成一个列表来解决这个问题吗?prune是正确的,一个dict是一个糟糕的结构,dict是无序的,所以在键值中不知道什么是第一个或最后一个。高什,你们很快。。。如果能解释一下可能会更好。考虑到你原来的帖子中没有任何具体问题,很难知道该解释哪一部分。对于下一篇关于堆栈溢出的文章,请包括一个特定的问题,以及一些您自己编写的解决该问题的代码。这样做将鼓励人们给出解释,而不仅仅是代码示例。请在下一篇文章之前查看。我正在使用librosa制作彩色图像,并使用LilyPond雕刻机绘制注释。@Capriles听起来很棒!顺便说一句,mingus和abjad都支持LilyPond后端进行乐谱渲染。