将文本文件中的文本转换为字典中的列表

时间:2012-06-05 00:29:27

标签: python list file-io dictionary

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

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']}

2 个答案:

答案 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的标准库类来简化,dictimport 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}}个对象可以像其他代码一样使用常规字典。