在Python中尝试用 ":" 和 "," 分割,但遇到ValueError
我有一个文件,我正在读取这个文件,然后把内容分开并放进一个字典里。但是我一直遇到一个错误,我觉得可能是因为街道地址里有一个逗号(,)。
这是我文件的内容:
axe99:315 W. 115th Street, Apt. 11B:New York:NY:10027
jab44:23 Rivington Street, Apt. 3R:New York:NY:10002
ap172:19 Boxer Rd.:New York:NY:10005
jb23:115 Karas Dr.:Jersey City:NJ:07127
jb29:119 Xylon Dr.:Jersey City:NJ:07127
ak9:234 Main Street:Philadelphia:PA:08990
这是我的代码:
f2data = open('ex1.txt')
for line in f2data:
print line.strip().split(':')
city_dict = dict(item.split(':') for item in line.strip('\n').split(','))
print city_dict
它一直抛出这个错误:
['jk43', '23 Marfield Lane', 'Plainview', 'NY', '10023']
city_dict = dict(item.split(':') for item in line.strip('\n').split(','))
ValueError: dictionary update sequence element #0 has length 5; 2 is required
我刚学Python,真的不知道这个错误是什么意思,任何建议都非常感谢!
4 个回答
1
当你从一个列表创建一个 dict
(字典)时,你需要一个包含两个元素的列表(或者元组)的列表。比如说:
my_dict = dict([['axe99', 'New York'], ['jab44', 'New York']])
这其实就是一组键值对的列表。你遇到的错误是因为你传入的列表中,有一个子列表有五个元素,而不是两个。
1
假设使用的是Python2.7
from collections import Counter
with open('ex1.txt') as f2data:
print Counter(tuple(item.split(":")[2:4]) for item in f2data)
3
你遇到这个错误是因为你试图把一个包含5个项目的列表放进一个字典构造器里,而这个构造器只接受两个项目(在字典构造器中,Python认为你在使用的是):
这里有一些可能的构造器列表
dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])
这些内容摘自Python文档
你需要以不同的方式拆分你的字符串,或者找到更好的方法来格式化你的数据。如果你是从一个csv
文件中读取数据,可以参考Michael Hoffman的回答,那是从csv文件读取数据的正确方法。
如果不是,请说明你在做什么以及原因。
编辑:添加了目标,更新了回答
对于输入:
axe99:315 W. 115th Street, Apt. 11B:New York:NY:10027
jab44:23 Rivington Street, Apt. 3R:New York:NY:10002
ap172:19 Boxer Rd.:New York:NY:10005
jb23:115 Karas Dr.:Jersey City:NJ:07127
jb29:119 Xylon Dr.:Jersey City:NJ:07127
ak9:234 Main Street:Philadelphia:PA:08990
代码:
city_dict = {}
for line in open('ex1.txt'):
if item.split(':')[3] in city_dict:
city_dict[item.split(':')[3]] += 1
else:
city_dict[item.split(':')[3]] = 1
print (city_dict)
将输出你想要的结果:
{'NY': 3, 'NJ': 2, 'PA': 1}