你能解释一下吗?

时间:2015-04-29 18:14:45

标签: python

快速提问:在Python 3中,如果我有以下代码

def file2dict(filename):
   dictionary = {}
   data = open(filename, 'r')
   for line in data:
      [ key, value ] = line.split(',')
      dictionary[key] = value
   data.close()
   return dictionary

这意味着文件必须在文件的每一行中包含正好2个字符串(或数字,或其他),因为这行: [ key, value ] = line.split(',') 所以,如果我的文件中有这样的东西

  

约翰,45,65

     

杰克,56442

该函数抛出异常。 问题:为什么关键,价值在方括号中?为什么,例如,

adr, port = s.accept()

不使用方括号? 如果我想将2个值附加到字典中的每个键,如何修改此代码?谢谢。

3 个答案:

答案 0 :(得分:1)

[周围的]key, value并没有为您提供任何帮助。

您收到的错误ValueError: too many values to unpack是因为您用逗号分隔John,45,65之类的文字。在shell中执行"John,45,65".split(',')。你得到了

>>> "John,45,65".split(',')
['John', '45', '65']

您的代码正在尝试将3个值"John"4565分配给两个变量keyvalue,从而导致错误

有几个选择:

1)str.split有一个可选的maxsplit参数:

>>> "John,45,65".split(',', 1)
['John', '45,65']

如果"45,65"是您要为字典中的该键设置的值。

2)削减额外的价值。

如果65不是你想要的,那么你可以做一些像

这样的事情
>>> name, age, unwanted = "John,45,65".split(',',)
>>> name, age, unwanted
('John', '45', '65')
>>> dictionary[name] = age
>>> dictionary
{'John': '45'}

并且不使用unwanted变量,或者拆分成列表而不使用最后一个元素:

>>> data = "John,45,65".split(',')
>>> dictionary[data[0]] = data[1]
>>> dictionary
{'John': '45'}

答案 1 :(得分:0)

你可以使用三个变量而不是两个,先制作一个键,

def file2dict(filename):
   dictionary = {}
   data = open(filename, 'r')
   for line in data:
       key, value1,value2  = line.split(',')
      dictionary[key] = [int(value1), int(value2)]
   data.close()
   return dictionary

答案 2 :(得分:0)

当执行拆分为字典的行时,请考虑通过指定maxsplit来限制拆分数,并检查以确保该行包含逗号:

def file2dict(filename):
    data = open(filename, 'r')
    dictionary = dict(item.split(",",1) for item in data if "," in item)
    data.close()
    return dictionary