Tengo que revisar cada pronunciación de una palabra, que he almacenado como tal: cada palabra está en un diccionario (a continuación llamada wordAndPron), y cada palabra en ese diccionario tiene varias pronunciaciones almacenadas como listas.

{ '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']]

}

¿Cómo accedo a los elementos de cada lista? Entonces, ¿qué posición sería cada uno de los fonemas, como 'R' y 'AH0'?

Voy a usar un bucle for para pasar y comparar fonemas entre sí (encontrar palabras que riman), pero no estoy seguro de cómo hacerlo.

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

Pido disculpas si esta es una pregunta muy obvia / simple, ¡pero estoy comenzando Python desde Java y solo he tomado otra clase de programación!

Esto es trabajo de clase. No estoy preguntando cómo escribir todo el programa, solo cómo acceder a los elementos individuales.

2
Ollie 9 sep. 2018 a las 06:03

3 respuestas

La mejor respuesta

Dado que el único valor del dict wordAndPron es una lista de listas, puede usar un bucle for anidado para acceder a los fonemas dentro. Y dado que tiene varias pronunciaciones por palabra, en lugar de devolver solo el fonema estresado de la primera pronunciación en la lista, debe hacer que la función yield sea el hallazgo para que la persona que llama pueda obtener todas las pronunciaciones de una palabra dada de el generador:

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
blhsing 9 sep. 2018 a las 03:24

Pon todas las palabras en un diccionario. Acceda a valores y partes de valores de la siguiente manera.

>>> 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'
>>> 

No me queda claro qué está tratando de hacer en su función, por lo que no puedo decir cómo revisarlo.

0
Terry Jan Reedy 9 sep. 2018 a las 03:23

Para acceder a los elementos de una lista de listas en un diccionario solo necesita usar tres para bucles , es bastante simple, este código se explica por sí mismo:

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('--------------------------------------------')     

Salida:

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']


--------------------------------------------   
0
Tomas T 9 sep. 2018 a las 04:09