如何制作一个字典,关键是英语中的单词,以及希腊语中的单词(utf-8),当我试图获取值时,我得到一个KeyError

时间:2017-04-23 09:55:27

标签: python dictionary utf-8

我试图说明一个翻译词典:

  • 当用英语给出一个单词时,我返回希腊语中的含义(utf-8)

    #Possible Content Of File:
    #"Hello,Γεια\n" 
    #"Car,Αμαξι\n"
    
    with codecs.open("dict.txt",'r',encoding='utf8') as f:
        lines= f.read()  #contains all the lines of the file
    
    word=raw_input("Word To Find\n")
    flag=0
    temp=""
    temp2=""
    dictionary={}
    #here is an algorithm i came up with, to seperate the string and get on temp the key
    #and on temp2 the value , then i add them on the dictionary
    for i in range(0,len(lines)):
        if flag==0:
            temp+=lines[i]
        if lines[i]==',':
            flag=1
            continue
        if lines[i]=='\n':
            flag=0
            dictionary.update({temp:temp2}) #adding the key and the value
            #(the value is in utf-8)
            temp=""
            temp2=""
        if flag==1:
            temp2+=lines[i]
    
    #print(dictionary.keys())  # [u'Hello,',u'Car,']
    #print(dictionary.get(word)) returns None
    print(dictionary[word])# KeyError
    
  

注意:该文件包含这种字符串:“Hello,Γεια\ n”和“Car,Αμαξι\ n”

     

错误:print(字典[word])抛出KeyError

     

这是Python 2.7

提前多多感谢

2 个答案:

答案 0 :(得分:0)

问题的实现需要两个循环。外环通过线,内环通过当前线的字符,例如:

for line in lines:
    for i in range(0, len(line)):
        # Then using line[i] instead of lines[i]

此外,read()获取全部内容,readlines()是正确的功能。

以下实现使用split(',')来分隔行中的单词。 此外,可以通过简单的dictionary[key] = value更新字典。     导入编解码器

with codecs.open("dict.txt", 'r', encoding='utf8') as f:
    lines = f.readlines()

word=raw_input("Word To Find\n")
dictionary={}
for line in lines:
    if ',' in line:
        key, value = line.split(',')
        dictionary[key.strip()] = value.strip()
    else:
        print('Cannot parse line: ' + line)

if word in dictionary:
    print(dictionary[word])
else:
    print('Error: Translation not found.')

之前的实现假定该值没有逗号。 以下版本允许使用逗号:

for line in lines:
    comma_index = line.index(',')
    if comma_index >= 0:
        key = line[0:comma_index]
        value = line[comma_index + 1:]
        dictionary[key.strip()] = value.strip()
    else:
        print('Cannot parse line: ' + line)

答案 1 :(得分:0)

你的分裂算法有点错误,因为内置支持在python中执行相同的任务,为什么要重新发明轮子?

  componentDidMount(){
this.timeID=setInterval(()=>{
  this.setState({
    text:this.props.text+"."
  })
  console.log(this.state.text);
},1000)