【问题标题】:creating a dictionary from a text file 2 values [closed]从文本文件 2 个值创建字典 [关闭]
【发布时间】:2016-09-26 10:53:24
【问题描述】:
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)

最后一个问题,我应该在这里完成。看来我的值仍然没有以浮点数的形式出现,因为我正在尝试检查该值是否在 2 个数字之间并且我收到此错误

TypeError:不可排序的类型:int()

    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'

【问题讨论】:

  • 能否提供完整的错误回溯?
  • 您发布的代码在for循环中有缩进错误。
  • 在您粘贴的代码中没有 print(d) .. 变量 d 是否超出范围并且不在您调用它的函数中?请发布整个代码..
  • 能否包含进行比较并导致错误的代码?
  • 仅供参考:您应该在原始问题中添加新信息,而不是编辑和删除旧信息。如果您完全替换原来的问题,那么碰巧看到它的其他用户会感到困惑。

标签: python function dictionary


【解决方案1】:

您的函数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():

【讨论】:

    【解决方案2】:

    使用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)
    

    【讨论】:

    • 那么我需要做的就是将它们变成字典吗?
    • 是的。如果您遇到错误,只需编辑上面的帖子以获得更多帮助。
    • 我只是好奇有没有办法打印(d)只是为了检查或任何事情,因为我尝试过的一切最终都说 d isnt defined
    • 当然;您可以print d 查看d 的当前值。如果您复制/粘贴您遇到的问题的确切错误,那将是一个巨大的帮助。
    • 刚刚根据您问题中的附加信息编辑了我的答案。
    【解决方案3】:
    def makedict(filename):
        filename=open(filename,"r")
        d={}
        for line in filename:
             (key,value1,value2)=line.split()
              d[key]=(float(value1),float(value2))
    

    【讨论】:

      【解决方案4】:

      使用这个:

      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'], ..是对应的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多