将字典中的值与列表中的值进行比较

时间:2014-11-22 22:22:13

标签: python list dictionary compare

基本上,该程序会检查一首诗的押韵模式是否正确。我采用了['A','B','A']的参数,并将其排列在一个字典中,该字典中包含要比较的单词索引。

rhyme_pattern = {'A': [0, 2], 'B': [1]}

我还从每一行中取出了最后一个单词并将其放入列表中。

words_to_compare = ['OFF', 'NEXT', 'ENDS']

我已经制作了一个帮助函数来比较两个单词,如果它们押韵。我无法弄清楚如何遍历rhyme_pattern ['A']并比较单词'OFF'和'ENDS'。此外,如果只有一个索引值,我会得到不比较任何东西的问题,比如B.

3 个答案:

答案 0 :(得分:1)

如果dict.get(some_val, [])中没有显示some_val,您可以使用dict确保返回空列表:

rhyme_pattern.get('A', [])

然后编写辅助函数,以便在条目只有空列表时它的行为符合预期。

假设您的比较函数被称为compare_with,那么您可以像dict['A']中的元素进行比较:

[compare_with(x, y) for x in rhyme_pattern.get('A', []) 
                    for y in words_to_compare]

最后一位假设您的比较功能与compare_with(0, 'OFF')类似。如果您希望通过words_to_compare的内容索引rhyme_pattern['A'],则可能如下所示:

A_words = [word_to_compare[x] for x in rhyme_pattern.get('A', [])]

答案 1 :(得分:1)

rhyme_pattern = {'A': [0, 2], 'B': [1]}
words_to_compare = ['OFF', 'NEXT', 'ENDS']
for val in rhyme_pattern["A"]:
    print(words_to_compare[val])

要访问所有值,请迭代值:

for val in rhyme_pattern.itervalues(): # just .values() for python 3
    print([words_to_compare[v] for v in val])

这假设所有值都在words_to_compare的索引范围内,而你的问题似乎就是这样。

答案 2 :(得分:1)

您需要遍历rhyme_pattern并将任何数组中的所有值与超过1的值进行比较。困难的部分是将所有单词组合进行比较。 itertools库让这很容易。

这应该有效:

import itertools as it  
for words in rhyme_pattern:
        if len(words) > 1:
             #now loop through all combinations of 2 words
             for pair in it.permutations(words,2):
                 if not words_ryhme(*pair):
                    return False
return True