快速提问:在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个值,如何修改此代码?谢谢。

最佳答案

[]周围的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'}

关于python - 你能解释一下吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29951411/

10-12 23:44