我有一个文件,我正在阅读并拆分并推入字典。我一直收到错误,我认为是因为街道地址包含逗号(,)。
这是我的文件内容:
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的新手,并且真的不知道这个错误意味着什么,任何想法都非常感激!
答案 0 :(得分:3)
您收到错误是因为您尝试将包含5个项目的列表推送到字典构造函数中时,它只需要两个项目(在dict构造函数python中认为您正在使用):
这是一个可能的构造函数列表
dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])
您需要以不同方式拆分字符串或找到更好的格式化数据的方法。
如果您正在阅读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}
答案 1 :(得分:1)
当您从这样的列表创建dict
时,您需要一个包含2个元素列表(或元组)的列表。例如:
my_dict = dict([['axe99', 'New York'], ['jab44', 'New York']])
这对应于键/值对的列表。您得到的错误是因为您传入的列表中的一个列表有五个元素,而不是两个。
答案 2 :(得分: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 :(得分:0)
我想你可能会想要这样的东西:
from __future__ import with_statement
import collections
import csv
city_dict = collections.defaultdict(int)
with open('ex1.txt') as f2data:
reader = csv.reader(f2data, delimiter=":")
for row in reader:
city_state = row[2:4]
city_dict[city_state] += 1
print city_dict
修改:更改以适应明确的问题说明