PYTHON: доступ к элементам списка списков в словаре - PullRequest
0 голосов
/ 09 сентября 2018

Мне нужно пройти через каждое произношение слова, которое я сохранил как таковое: каждое слово находится в словаре (ниже называется 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

Я прошу прощения, если это очень очевидный / простой вопрос, но я только начинаю Python с Java и взял только один другой класс программирования!

Это классная работа. Я не спрашиваю, как написать всю программу, а только как получить доступ к отдельным элементам.

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Так как единственное значение 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
0 голосов
/ 09 сентября 2018

для доступа к элементам списка списков в словаре, вам просто нужно использовать три для циклов , это довольно просто, этот код не требует пояснений:

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


--------------------------------------------   
0 голосов
/ 09 сентября 2018

Поместите все слова в один словарь. Доступ к значениям и частям значений осуществляется следующим образом.

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

Мне не ясно, что вы пытаетесь сделать в своей функции, поэтому я не могу сказать, как ее пересмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...