[英]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.