【问题标题】:Comparing values in a dictionary to values in a list将字典中的值与列表中的值进行比较
【发布时间】:2014-11-22 22:22:13
【问题描述】:

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

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

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

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

我还创建了一个辅助函数来比较两个单词以及它们是否押韵。我不知道如何循环遍历 rhyme_pattern['A'] 并比较单词 'OFF' 和 'ENDS'。另外,如果只有一个索引值,比如 B,我就会遇到不比较任何东西的问题。

【问题讨论】:

  • 请显示您的代码,输入,所需的输出。
  • 目前还不清楚您要在这里完成什么。

标签: python list dictionary compare


【解决方案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

【讨论】:

    【解决方案2】:
    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 的索引范围内,从您的问题来看似乎是这种情况。

    【讨论】:

      【解决方案3】:

      如果some_val 没有出现在dict 中,您可以使用dict.get(some_val, []) 确保返回一个空列表:

      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', [])]
      

      【讨论】:

        猜你喜欢
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多