繁体   English   中英

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

[英]Comparing values in a dictionary to values in a list

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

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

我还把每一行的最后一个词放在了列表中。

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

而且我做了一个辅助函数,可以比较两个单词以及它们是否押韵。 我不知道如何遍历rhyme_pattern ['A']并比较单词'OFF'和'ENDS'。 另外,如果只有一个索引值(如B),我还会遇到不比较任何内容的问题。

您可以使用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') 相反,如果您希望通过rhyme_pattern['A']的内容索引到words_to_compare ,则可能看起来像这样:

A_words = [word_to_compare[x] for x in rhyme_pattern.get('A', [])]
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的索引范围内,从您的问题来看似乎是这样。

您需要遍历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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM