【问题标题】:PYTHON: Accessing elements of a list of lists in a dictionaryPYTHON:访问字典中列表列表的元素
【发布时间】:2019-02-13 21:30:11
【问题描述】:

我必须检查一个单词的每个发音,我已将其存储为:每个单词都在字典中(以下称为 wordAndPron),并且该字典中的每个单词都有多个存储为列表的发音。

{ 'RECORD' : 

[ ['R', 'AH0', 'K', 'AO1', 'R', 'D'], 

['R', 'EH1', 'K', 'ER0', 'D'], 

['R', 'IH0', 'K', 'AO1', 'R', 'D']]

}

{ 'MORTGAGE' :

[ ['M', 'AO1', 'R', 'G', 'AH0', 'JH'],

['M', 'AO1', 'R', 'G', 'IH0', 'JH']]

}

如何访问每个列表的元素?那么每个音素(如“R”和“AH0”)的位置是什么?

我将使用 for 循环遍历并相互比较音素(查找押韵词),但我不确定如何去做。

def primary_stress_position(wordAndPron):
        stress = ''
        stressedPosition = 0
        phoneme = 0
        for phoneme in wordAndPron.values():   # <<< Problem area
                if phoneme.endswith('1'):
                        stress = phoneme
                        stressedPosition = position
                position += 1
        return stress, stressedPosition

如果这是一个非常明显/简单的问题,我深表歉意,但我只是从 Java 开始 Python 并且只学习了其他编程课程!

这是课堂作业。我不是在问如何编写整个程序,只是在问如何访问各个元素。

【问题讨论】:

    标签: python list dictionary for-loop


    【解决方案1】:

    由于wordAndPron dict 的唯一值是列表列表,您可以使用嵌套的for 循环来访问其中的音素。并且由于每个单词有多个发音,而不是只返回列表中第一个发音的重读音素,您应该使用函数yield 进行查找,以便调用者可以从生成器中获取给定单词的所有发音:

    def primary_stress_position(wordAndPron):
        for entry in wordAndPron.values()[0]:
            for pron in entry:
                stress = ''
                stressedPosition = None
                position = 0
                for phoneme in pron:
                    if phoneme.endswith('1'):
                        stress = phoneme
                        stressedPosition = position
                        break
                    position += 1
                yield stress, stressedPosition
    

    【讨论】:

      【解决方案2】:

      将所有单词放在一本字典中。访问值和部分值如下。

      >>> d = {
      'RECORD' :
      [ ['R', 'AH0', 'K', 'AO1', 'R', 'D'],
      ['R', 'EH1', 'K', 'ER0', 'D'],
      ['R', 'IH0', 'K', 'AO1', 'R', 'D']],
      'MORTGAGE' :
      [ ['M', 'AO1', 'R', 'G', 'AH0', 'JH'],
      ['M', 'AO1', 'R', 'G', 'IH0', 'JH']]
      }
      >>> d['RECORD']
      [['R', 'AH0', 'K', 'AO1', 'R', 'D'], ['R', 'EH1', 'K', 'ER0', 'D'], ['R', 'IH0', 'K', 'AO1', 'R', 'D']]
      >>> d['RECORD'][0]
      ['R', 'AH0', 'K', 'AO1', 'R', 'D']
      >>> d['RECORD'][0][0]
      'R'
      >>> 
      

      我不清楚你想在你的函数中做什么,所以我不能说如何修改它。

      【讨论】:

        【解决方案3】:

        要访问字典中列表的元素,您只需要使用三个 for 循环,这相当简单,这段代码一目了然:

        d = { 'RECORD' : 
        
        [ ['R', 'AH0', 'K', 'AO1', 'R', 'D'], 
        
        ['R', 'EH1', 'K', 'ER0', 'D'], 
        
        ['R', 'IH0', 'K', 'AO1', 'R', 'D']]
        
        , 
         'MORTGAGE' :
        
        [ ['M', 'AO1', 'R', 'G', 'AH0', 'JH'],
        
        ['M', 'AO1', 'R', 'G', 'IH0', 'JH']]
        
        }
        
        
        for outter_list in d.values():
            print(f'the outter_list now is: {outter_list} \n')
            for inner_list in outter_list:
                print(f'the inner_list now is: {inner_list}')
                for element in inner_list:
                    print(f'element: {element}  from current innerlist: {inner_list}')
                print('\n')
            print('--------------------------------------------')     
        

        输出:

        the outter_list now is: [['R', 'AH0', 'K', 'AO1', 'R', 'D'], ['R', 'EH1', 'K', 'ER0', 'D'], ['R', 'IH0', 'K', 'AO1', 'R', 'D']]
        
        the inner_list now is: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        element: R  from current innerlist: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        element: AH0  from current innerlist: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        element: K  from current innerlist: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        element: AO1  from current innerlist: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        element: R  from current innerlist: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        element: D  from current innerlist: ['R', 'AH0', 'K', 'AO1', 'R', 'D']
        
        
        the inner_list now is: ['R', 'EH1', 'K', 'ER0', 'D']
        element: R  from current innerlist: ['R', 'EH1', 'K', 'ER0', 'D']
        element: EH1  from current innerlist: ['R', 'EH1', 'K', 'ER0', 'D']
        element: K  from current innerlist: ['R', 'EH1', 'K', 'ER0', 'D']
        element: ER0  from current innerlist: ['R', 'EH1', 'K', 'ER0', 'D']
        element: D  from current innerlist: ['R', 'EH1', 'K', 'ER0', 'D']
        
        
        the inner_list now is: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        element: R  from current innerlist: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        element: IH0  from current innerlist: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        element: K  from current innerlist: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        element: AO1  from current innerlist: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        element: R  from current innerlist: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        element: D  from current innerlist: ['R', 'IH0', 'K', 'AO1', 'R', 'D']
        
        
        --------------------------------------------
        the outter_list now is: [['M', 'AO1', 'R', 'G', 'AH0', 'JH'], ['M', 'AO1', 'R', 'G', 'IH0', 'JH']]
        
        the inner_list now is: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        element: M  from current innerlist: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        element: AO1  from current innerlist: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        element: R  from current innerlist: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        element: G  from current innerlist: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        element: AH0  from current innerlist: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        element: JH  from current innerlist: ['M', 'AO1', 'R', 'G', 'AH0', 'JH']
        
        
        the inner_list now is: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        element: M  from current innerlist: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        element: AO1  from current innerlist: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        element: R  from current innerlist: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        element: G  from current innerlist: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        element: IH0  from current innerlist: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        element: JH  from current innerlist: ['M', 'AO1', 'R', 'G', 'IH0', 'JH']
        
        
        --------------------------------------------   
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-06
          • 2021-07-27
          • 2015-07-05
          • 1970-01-01
          • 1970-01-01
          • 2016-03-16
          • 2022-10-04
          • 1970-01-01
          相关资源
          最近更新 更多