从文本文件2值创建字典

时间:2016-05-28 02:43:12

标签: python function dictionary

def makeDict(filename):
    with open(filename,"r") as f:
         dict_={}
         for line in f:
             (key,value1,value2)=line.split()
             dict_[key]=[(float(value1),float(value2))]

mylist=[]
for value1 in dict_:
     if number < value1 < number:
        mylist.append(key)

最后一个问题,我应该在这里完成。似乎我的值仍然没有作为浮点数出现,因为我试图检查值是否在两个数字之间,我得到这个错误

  

TypeError:unorderable类型:int()&lt; STR()

    newDict=makeDict("file.txt")
     >>> testdict(500,530,newDict)

    line 28, in testdict
    for k,v in newDict.iteritems():
 AttributeError: 'dict' object has no attribute 'iteritems'

4 个答案:

答案 0 :(得分:2)

您的函数makeDict不会返回值。

def makeDict(filename):
    with open(filename,"r") as f:
         d={}
         for line in f:
             (key,value1,value2)=line.split()
             d[key]=[(float(value1),float(value2))]
    # Return the dictionary
    return d

修改

代码中的问题是,当您遍历只有一个值的字典时,在这种情况下value1,它只会遍历键。你想要的是迭代可以用方法.values()

完成的值
def makeDict(filename):
    with open(filename,"r") as f:
         dict_={}
         for line in f:
             (key,value1,value2)=line.split()
             dict_[key]=[(float(value1),float(value2))]

mylist=[]
# Iterate through the values instead
for value1 in dict_.values():
     if number < value1 < number:
        mylist.append(key)

您遇到的最后一个错误可能是由您使用的Python版本引起的。请参阅this post

  

在Py3.x中,事情更干净,因为只有dict.items(),dict.keys()和dict.values()可用,它们返回视图对象,就像在Py2中的dict.viewitems()一样.x做了。

因此,您应该将testdict中的代码更改为for k, v in newDict.items():

答案 1 :(得分:1)

使用float()函数将值转换为浮点数。

此外,您在使用文件后应该close(),或者将代码包装在with块中(这将为您关闭文件):

def makedict(filename):
    with open(filename,"r") as f:
        d={}
        for line in f:
            (key,value1,value2)=line.split()
            d[key]=(float(value1),float(value2))
    return d

最后,不要将dict用作变量名,因为它已作为内置存在。改为使用dict_(或其他名称):

dict_ = makeDict["file.txt"]

修改

带上一粒盐,因为它只是根据您问题中的信息猜测,但您想要改变这一点:

for value in dict_:
    if number < value1 < number:
         mylist.append(key)

到此:

for k, v in dict_.items():
    if number < v[0] < number:
        mylist.append(k)

答案 2 :(得分:0)

def makedict(filename):
    filename=open(filename,"r")
    d={}
    for line in filename:
         (key,value1,value2)=line.split()
          d[key]=(float(value1),float(value2))

答案 3 :(得分:0)

使用此:

def makedict(fname):
    filename=open(fname,"r")
    d={}
    for line in filename:
         (key,value1,value2)=line.split()
         d[key]=[(value1),(value2)]
    print(d) ## print the dictionary

您将这些值存储为列表。

例如:

档案 -

A B C
1 2 E
3 4 E
5 6 E
7 8 E

输出(字典) -

{'3': ['4', 'E'], '7': ['8', 'E'], 'A': ['B', 'C'], '5': ['6', 'E'], '1': ['2', 'E']}

此处A,1,3,..为关键字,['B', 'C'], ['2', 'E'], ..为对应值。