快速提问:在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个值附加到字典中的每个键,如何修改此代码?谢谢。
答案 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"
,45
和65
分配给两个变量key
和value
,从而导致错误
有几个选择:
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