首页 > 解决方案 > python map减少具有完全相同元音的单词

问题描述

我正在尝试查找和计算具有相同元音组合的单词。每行的元音按字母顺序排列,后跟一个冒号,然后是恰好包含这些元音的单词数。如果有没有元音的单词,则冒号前不打印任何内容。所以我的映射器输出是这样的:

输入文件

我的输出应该是这样的 - :2 eo:2 eeo:1 eoo: 1 但我得到的是 eo 2 eoo 2。所以我错过了空格和 eeo。这是我的代码:

    import sys
     

    current_key_being_processed = None
    next_key_found = None
    vowel_total = 0
    vowel_dict = {}

    for line in sys.stdin:

      next_key_found, value = line.split('\t')
      next_key_found = sorted(next_key_found)
      next_key_found = ''.join(next_key_found)
      if current_key_being_processed == next_key_found:
              vowel_total = vowel_total + int(1)  
      
      if current_key_being_processed != next_key_found:
           vowel_total = 0   
           if next_key_found is not None:
                 current_key_being_processed = next_key_found
                 vowel_total = vowel_total + int(1)                           
                  
      else:
      
            
           if current_key_being_processed:
               current_key_being_processed = ''.join(sorted(current_key_being_processed))         
               vowel_dict[current_key_being_processed] = vowel_total
               vowel_total = 0 
               current_key_being_processed = next_key_found

    if current_key_being_processed == next_key_found:
          vowel_total = vowel_total + int(1)    
          vowel_dict[current_key_being_processed] = vowel_total    
            

    for key in sorted(vowel_dict.keys()): 
        print('final dict =',key, vowel_dict[key])

标签: pythonmapreduce

解决方案


不确定我是否正确遵循。这是你想要的?

words  = ['   1','   1','eoe 1','oe  1','oe  1','ooe 1']
vowels = {}
for word in words:
    key         = ''.join(sorted(c for c in word.strip(' 1') if c in 'aeiouy'))
    vowels[key] = vowels.get(key,0) + 1
print(vowels)

推荐阅读