处理文件读取和字典中多个值的键
我想知道怎么写代码来读取一个文件的第一行,并把它作为字典的一个键,然后继续读取下面的值,把它们放到对应的键下,形成一个字典。举个例子:
项目 质量 成本 地点
Ball 1 $12 TX
Umbrella 5 $35 NY
sweater 89 $100 LA
这里,表示的就是我的文件。当我读取时,我希望字典的键是加粗的那些内容,而在我继续读取下面的行时,这些行的内容会作为多个值放到相应的键下。
谢谢
2 个回答
1
看起来你在描述一个用空格分隔的csv文件。像这样的方法应该可以用得上(来自Python的帮助文档)。
>>> import csv
>>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|')
>>> for row in spamReader:
... print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
其实,使用csv.DictReader
会更好,这样每一行就可以变成一个字典,字典的键是由第一行定义的。
我假设每组值之间都有换行符。
编辑:根据上面的例子,我们可以得到:
In [1]: import csv
In [2]: f = csv.DictReader(open('test.txt', 'r'), delimiter = ' ', skipinitialspace = True)
In [3]: for row in f: print row
{'Item': 'Ball', 'Cost': '$12', 'Quality': '1', 'Place': 'TX'}
{'Item': 'Umbrella', 'Cost': '$35', 'Quality': '5', 'Place': 'NY'}
{'Item': 'sweater', 'Cost': '$100', 'Quality': '89', 'Place': 'LA'}
将参数skipinitialspace = True
传给DictReader
是必要的,这样可以去掉多个空格,而不会在每一行中产生多余的条目。
0
对于一个特定的键,你不能有“多个值”,但你当然可以让每个键对应一个值,这个值是一个列表。
举个例子(适用于Python 2.6或更高版本——我使用next
函数是为了通用性,而不是像readline
这样的特定方法,不过你当然可以根据需要调整!):
def makedictwithlists(f):
keys = next(f).split()
d = {}
for k in keys: d[k] = []
for line in f:
for k, v in zip(keys, line.split()):
d[k].append(v)
return d