所以例如我有一个带有人们电话号码,姓名,地址的文本文件。 看起来像这样,每行末尾有一个返回
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'],['kim fry','45 tony's rd']}
答案 0 :(得分: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:])
答案 1 :(得分: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
{{1}}个对象可以像其他代码一样使用常规字典。