0

例如,我有一个包含人们电话号码、姓名、地址的文本文件。看起来像这样,每行末尾都有一个返回

555-667282,bill higs,67 hilltop

555-328382,john paul,85 big road

555-457645,zac fry,45 tony's rd

555-457645,kim fry,45 tony's rd

我想把它全部放在字典里,在字典里电话号码是关键,名字和地址是一个列表。所以如果我想打印字典,它会看起来像这样。这样做的代码是什么

{555-667282:['bill higs','67 hilltop'],555-328382:['john paul','85 big road'],555-457645:['zac fry','45 tony's rd'] ,['金弗莱','45 tony's rd']}

4

2 回答 2

2
dicto = {}

with open('your_file.txt') as f:
    for line in f:
        s_line = line.rstrip().split(',')
        dicto[s_line[0]] = s_line[1:]

编辑:

要处理与一个电话号码关联的多个条目的情况:

from collections import defaultdict

dicto = defaultdict(list)

with open('your_file.txt') as f:
    for line in f:
        s_line = line.rstrip().split(',')
        dicto[s_line[0]].append(s_line[1:])
于 2012-06-05T00:36:31.270 回答
1

这种文件格式是csv标准库中的模块旨在处理的。但是,您不能按照您想要的方式布置字典,因为字典键只能映射到一件事。解决该限制的一种简单方法是将每个电话号码映射到列表列表,如下面的示例代码和输出所示:

import csv

result = {}
with open('numbers.txt', 'rb') as input:
    for phone_number, name, address in csv.reader(input):
        if phone_number in result:
            result[phone_number] += [[name, address]]
        else:
            result[phone_number] = [[name, address]]

print result

输出:

{'555-328382': [['john paul', '85 big road']], 
 '555-457645': [['zac fry', "45 tony's rd"], ['kim fry', "45 tony's rd"]], 
 '555-667282': [['bill higs', '67 hilltop']]}

内部for循环中的代码可以通过使用另一个名为defaultdict的标准库类来简化,该类是dict. 每当引用不存在的值时,它们会自动将字典条目初始化为指定的默认值。以下是如何将其应用于此示例:

import collections
import csv

result = collections.defaultdict(list)
with open('numbers.txt', 'rb') as input:
    for phone_number, name, address in csv.reader(input):
        result[phone_number] += [[name, address]]

print result

第二版的输出:

defaultdict(<type 'list'>, {
 '555-328382': [['john paul', '85 big road']],
 '555-457645': [['zac fry', "45 tony's rd"], ['kim fry', "45 tony's rd"]],
 '555-667282': [['bill higs', '67 hilltop']]})

defaultdict否则,其他代码可以像使用常规字典一样使用对象。

于 2012-06-05T01:56:04.717 回答