【问题标题】:Tuple to dictionary in python by using text file使用文本文件在python中将元组转换为字典
【发布时间】:2017-10-16 08:30:27
【问题描述】:

我有一个返回字典的代码 名称作为键和对应的值是元组 数字。名字后面的第一个数字控制有多少个数字 在对应的元组中(元组中包含的数字取 从左到右)。比如"Ali 6 7 6 5 12 31 61 9"这行文字,名字后面的第一个数字是6,这行文字 成为带有关键字“Ali”的字典条目,并且 对应的值是由接下来的六个整数“Ali”组成的元组: (7、6、5、12、31、61)。

这是我从中获取代码的电影

  Bella 5 2 6 2 2 30 4 8 9 2
  Gill 2 9 7 54 67
  Jin 3 26 51 3 344 23 
  Elmo 4 3 8 6 8
  Ali 6 7 6 5 12 31 61 9

预期的输出是

Ali : (7, 6, 5, 12, 31, 61)
Bella : (2, 6, 2, 2, 30)
Elmo : (3, 8, 6, 8)
Gill : (9, 7)
Jin : (26, 51, 3)

所以我已经这样做了

   def get_names_num_tuple_dict(filename):      
   file_in = open(filename, 'r')
   contents = file_in.read()
   file_in.close()
   emty_dict = {}
   for line in contents:
      data = line.strip().split()
      key = data[0]
      length = int(data[1])
      data = tuple(data[2:length + 2])
      emty_dict[key] = data

   return emty_dict

但是我遇到了这个错误 长度 = 整数(数据 [1]) IndexError: 列表索引超出范围

有人可以帮忙吗?这将非常有帮助。第一次学习,字典有点弱。

【问题讨论】:

  • 你试过使用调试器吗?
  • 没有了解那个函数....它在python程序的什么地方?

标签: python dictionary tuples


【解决方案1】:

使用以下代码:

def get_names_num_tuple_dict(filename):      
   emty_dict = {}
   with open(filename) as f:
      for line in f:
         data = line.strip().split()
         key = data[0]
         length = int(data[1])
         data = tuple(data[2:length + 2])
         emty_dict[key] = data

   return emty_dict


print(get_names_num_tuple_dict('my_filename'))

输出:

{'Bella': ('2', '6', '2', '2', '30'), 'Gill': ('9', '7'), 'Jin': ('26', '51', '3'), 'Elmo': ('3', '8', '6', '8'), 'Ali': ('7', '6', '5', '12', '31', '61')}

【讨论】:

    【解决方案2】:

    会发生什么:

    contents = file_in.read()
    

    将您的文件读入字符串。当你遍历这个字符串时,它会逐个字符地给你IndexError: list index out of range

    基本上尝试使用:

    for line in file_in:
        data = line.strip().split()
            ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 2020-12-16
      • 2023-03-15
      • 2016-10-31
      • 2020-07-22
      • 2023-03-20
      • 2017-11-08
      相关资源
      最近更新 更多