繁体   English   中英

在 Python 中的字典(键和值)上迭代字符串列表

[英]Iterating a list of strings over a dictionary (keys and values) in Python

又来了。 一项“相当简单”的练习终于让我头疼了。

制作一个程序,使用查找表将任何一组字母转换为其相应的北约语音字母 ( https://en.wikipedia.org/wiki/NATO_phonetic_alphabet )。 还实现了反函数。

  • 输入:猫
  • 输出:查理阿尔法探戈

反函数:

  • 输入:查理阿尔法探戈
  • 输出:猫

我为每个字母定义了一个带有字母表和它的北约等价物的字典。 然后,我定义了一个函数,它将从列表中获取元素作为输入。 字母对应字典中我的键,字母转换对应我的值。 该功能适用​​于以下情况:

  • 当我输入一个字符时,它会给我它的“北约”等价物。 (将字符串与字母进行比较并输出字母转换)
  • 当我输入一个 Nato 字母字符串时,它将输出该字母。 (比较字符串与字母转换并输出字母)

当我需要评估列表中字符串的长度,然后将每个字符转换为其北约字母表时,我陷入了困境。

nato_alphabet = {'a':'Alfa', 'A': 'Alfa', 'b': 'Bravo', 'B': 'Bravo', 'c': 'Charlie', 'C': 'Charlie', 'd': 'Delta', 'D':'Delta', 'e': 'Echo', 'E':'Echo', 'f': 'Foxtrot', 'F': 'Foxtrot', 'G': 'Golf', 'g': 'Golf', 'h': 'Hotel', 'H': 'Hotel', 'k': 'Kilo', 'K': 'Kilo', 'l': 'Lima', 'L': 'Lima', 'm': 'Mike', 'M': 'Mike', 'n': 'November', 'N': 'November', 'o': 'Oscar', 'O': 'Oscar',
'p': 'Papa', 'P': 'Papa', 'q': 'Quebec', 'Q': 'Quebec', 'r': 'Romeo', 'R': 'Romeo', 's': 'Sierra', 'S': 'Sierra', 't':'Tango', 'T': 'Tango', 'u': 'Uniform', 'U': 'Uniform', 'V': 'Victor', 'v': 'Victor', 'w': 'Whiskey', 'W': 'Whiskey', 'y': 'Yankee', 'Y': 'Yankee', 'Z': 'Zulu', 'z': 'Zulu'}


#Passing through a list 

def convert(word_to_convert):
    word_converted= []
    for i in word_to_convert:
        for letter, letter_conversion in nato_alphabet.items():
            if i == letter:
                word_converted.append(letter_conversion)

            if i == letter_conversion:  
                word_converted.append(letter)   

            if len(i) == letter:
                word_converted.append(letter_conversion )                   
    return  word_converted                  
    

print(convert(['c', 'Alfa', 'moon']))   

谢谢你们每一个人的帮助 !

戴安娜

用:

def convert(word_to_convert):
    word_converted = []
    for i in word_to_convert:
        word_converted.append(" ".join(nato_alphabet[ii.lower()] for ii in i))
    return word_converted


print(convert(['c', 'Alfa', 'moon']))

输出

['Charlie', 'Alfa Lima Foxtrot Alfa', 'Mike Oscar Oscar November']

作为备选:

# Passing through a list
def convert(words_to_convert):
    word_converted = []
    # iterate over each word
    for word in words_to_convert:
        nato_encoded_list = []
        # iterate over each character in word
        for char in word:
            # fetch the corresponding value from nato_alphabet
            nato_encoded_list.append(nato_alphabet[char.lower()])
        
        # join the encoded words and add to word_converted list         
        word_converted.append(" ".join(nato_encoded_list))
    return word_converted

基本上遍历每个单词并为单词中的每个字符获取nato_alphabet值。

如果有不清楚的地方,这可能会让我知道

nato_alphabet = {'a':'Alfa', 'A': 'Alfa', 'b': 'Bravo', 'B': 'Bravo', 'c': 'Charlie', 'C': 'Charlie', 'd': 'Delta', 'D':'Delta', 'e': 'Echo', 'E':'Echo', 'f': 'Foxtrot', 'F': 'Foxtrot', 'G': 'Golf', 'g': 'Golf', 'h': 'Hotel', 'H': 'Hotel', 'k': 'Kilo', 'K': 'Kilo', 'l': 'Lima', 'L': 'Lima', 'm': 'Mike', 'M': 'Mike', 'n': 'November', 'N': 'November', 'o': 'Oscar', 'O': 'Oscar',
'p': 'Papa', 'P': 'Papa', 'q': 'Quebec', 'Q': 'Quebec', 'r': 'Romeo', 'R': 'Romeo', 's': 'Sierra', 'S': 'Sierra', 't':'Tango', 'T': 'Tango', 'u': 'Uniform', 'U': 'Uniform', 'V': 'Victor', 'v': 'Victor', 'w': 'Whiskey', 'W': 'Whiskey', 'y': 'Yankee', 'Y': 'Yankee', 'Z': 'Zulu', 'z': 'Zulu'}
nato_alphabet_inverse = {v.lower():k.lower() for k,v in nato_alphabet.items()}
nato_alphabet = {k.lower():v.lower() for k,v in nato_alphabet.items()}
# print(nato_alphabet_inverse)

def convert(list_to_convert):
    return_list = []
    for each_item in list_to_convert:
        # print(each_item)
        if " " in each_item:  # Sentence thus must be converted to Alphabets
            l_ = each_item.split()
            temp_list = []
            for each_word in l_:
                # print(each_word)
                temp_list.append(nato_alphabet_inverse[each_word.lower()])
                # return_list.append()
            return_list.append("".join(temp_list))


        else:  # Convert to equivalent Nato
            temp_list = []
            for chr in each_item:
                # print(chr)
                temp_list.append(nato_alphabet[chr.lower()])
            str_ = " ".join(temp_list)
            return_list.append(str_)
    return return_list
print(convert(['cAT',"charlie alfa tango"]))

暂无
暂无

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

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