2011-09-15 188 views
-1

我有一个全球性的词典就像在我的代码如下:添加层到词典

param_values = { 
      'aa' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,1.0), (-1,-1)],  
      'ae' : [(-1,-1), (-1,-1), (0.1,0.8), (-1,-1), (0.1,1.0), (-1,-1)], 
      'ah' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,1.0), (-1,-1)], 
      'ao' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.2,1.0), (-1,-1)], 
      'b' : [(-1,-1), (0.0,0.0), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'ch' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'd' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'dh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.35), (-1,-1)], 
      'dx' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.35), (-1,-1)], 
      'eh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,1.0), (-1,-1)], 
      'er' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.15,0.7), (-1,-1)], 
      'ey' : [(-1,-1), (-1,-1), (0.3,1.0), (-1,-1), (0.1,0.5), (-1,-1)], 
      'f' : [(0.3,1.0), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (-1,-1)], 
      'g' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'hh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'ih' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'iy' : [(-1,-1), (-1,-1), (0.2,1.0), (-1,-1), (0.1,0.8), (-1,-1)], 
      'jh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'k' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'l' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'm' : [(-1,-1), (0.0,0.0), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'n' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      'ng' : [(-1,-1), (0.1,1.0), (-1,-1), (-1,-1), (0.0,0.0), (-1,-1)], 
      'p' : [(-1,-1), (0.0,0.0), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'r' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      's' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      'sh' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      't' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'th' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'uh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.1,1.0)], 
      'uw' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.1,1.0)], 
      'v' : [(0.3,1.0), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (-1,-1)], 
      'w' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.1,1.0)], 
      'y' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.6), (-1,-1)], 
      'z' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      'zh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.6), (-1,-1)], 
      'o' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.4,1.0)] 
      } 

但我不得不在一个层中添加和分成元音和辅音,像下面这样。

param_values = { 
      'vowels':{ 
      'aa' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,1.0), (-1,-1)],  
      'ae' : [(-1,-1), (-1,-1), (0.1,0.8), (-1,-1), (0.1,1.0), (-1,-1)], 
      'ah' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,1.0), (-1,-1)], 
      'ao' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.2,1.0), (-1,-1)], 
      'eh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,1.0), (-1,-1)], 
      'er' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.15,0.7), (-1,-1)], 
      'ey' : [(-1,-1), (-1,-1), (0.3,1.0), (-1,-1), (0.1,0.5), (-1,-1)], 
      'ih' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'iy' : [(-1,-1), (-1,-1), (0.2,1.0), (-1,-1), (0.1,0.8), (-1,-1)], 
      'uh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.1,1.0)], 
      'uw' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.1,1.0)], 
      'o' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.4,1.0)]  
      }, 
      'consonants':{ 
      'b' : [(-1,-1), (0.0,0.0), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'ch' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'd' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'dh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.35), (-1,-1)], 
      'dx' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.35), (-1,-1)], 
      'f' : [(0.3,1.0), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (-1,-1)], 
      'g' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'hh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'jh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'k' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'l' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'm' : [(-1,-1), (0.0,0.0), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'n' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      'ng' : [(-1,-1), (0.1,1.0), (-1,-1), (-1,-1), (0.0,0.0), (-1,-1)], 
      'p' : [(-1,-1), (0.0,0.0), (-1,-1), (-1,-1), (0.1,0.8), (-1,-1)], 
      'r' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      's' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      'sh' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      't' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'th' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.4), (-1,-1)], 
      'v' : [(0.3,1.0), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (-1,-1)], 
      'w' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1),  (0.1,1.0)], 
      'y' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.6), (-1,-1)], 
      'z' : [(-1,-1), (0.1,1.0), (-1,-1), (0.3,1.0), (0.0,0.0), (-1,-1)], 
      'zh' : [(-1,-1), (-1,-1), (-1,-1), (-1,-1), (0.1,0.6), (-1,-1)] 
      }       
      } 

由于我的问题已被编辑,因此这是正确的。谢谢。

+5

好的,你有什么问题? –

+3

我想要做你的功课的钱。请告诉我们你试图做什么,哪里有问题,等等......哦,当然这是一本字典,而不是一份清单。 – Frank

+1

而你的“结果”是无效的Python。 –

回答

3

如果你想通过你的初始字典只有一次,你可以这样做:

vowels, consonants = {}, {} 
for (letters, data) in param_values.iteritems(): 
    relevant_dict = vowels if is_vowel(letters) else consonants 
    relevant_dict[letters] = data 
param_values = {'vowels': vowels, 'consonants': consonants} 

该方案具有在单行文字去无论是在vowels或明确地显示优势consonants

+0

虽然它似乎是恒定大小,所以不需要更复杂的单程算法。 –

+0

@larsmans:“恒定大小”是什么意思?输入的大小是事先知道的,而且很小?无论如何,我并没有降低你的答案,我发现这个答案对于手头的案例来说非常有效,即使它不是我用于较大输入的解决方案。 :) – EOL

+0

人的声音可以产生(或者,也许,语言学家可以识别)只有少量的元音和辅音,所以要扫描的项目数量有一个小的上限。我不反对你的解决方案,它只比我的稍长(尽管重复性较低)。 –

2
vowels = [(k, v) for k, v in param_values.iteritems() if is_vowel(k)] 
consonants = [(k, v) for k, v in param_values.iteritems() if not is_vowel(k)] 
param_values = {'vowels': vowels, 'consonants': consonants} 
+0

这会经过'param_values'字典两次,这在这里很好,因为它是一个小字典,但更通用的解决方案只经过一次字典,因为它应该更快。 – EOL

+0

的确如此,但这更具可读性。 +1到您的解决方案。我喜欢你的if-then-else表达式。 –