从文本文件到词典

2024-09-30 14:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个txt文件,把字符串作为我正在创建的字典的第一个键,其余的作为元组。有头在手之前,我已经让我的代码“忽略”它在开始。你知道吗

txt值示例:

"Ronald Reagan","1981","8","69","California","Republican"
"George Bush","1989","4","64","Texas","Republican"
"Bill Clinton","1993","8","46","Arkansas","Democrat"

我想创建提供以下输出的字典:

{"Ronald Reagan": (1981,8,69,"California", "Republican") etc.}

这就是我现在的代码:

def read_file(filename):
    d={}
    f= open(filename,"r")
    first_line = f.readline()
    for line in f:
        #line=line.strip('"')
        #line=line.rstrip()
        data=line.split('"')
        data=line.replace('"', "")

        print(data)


        key_data=data[0]

        values_data= data[1:]
        valuesindata=tuple(values_data)
        d[key_data]=valuesindata

    print(d)

read_file(filename)

第一个print语句(我把它放在那里只是为了看看当时的输出是什么,它给了我以下信息:

Ronald Reagan,1981,8,69,California,Republican
George Bush,1989,4,64,Texas,Republican

等它到达第二个print语句时,它会执行以下操作:

{'R': ('o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', 'a', 'g', 'a', 'n', ',', '1', '9', '8', '1', ',', '8', ',', '6', '9', ',', 'C', 'a', 'l', 'i', 'f', 'o', 'r', 'n', 'i', 'a', ',', 'R', 'e', 'p', 'u', 'b', 'l', 'i', 'c', 'a', 'n', '\n'), 'G': ('e', 'o', 'r', 'g', 'e', ' ', 'B', 'u', 's', 'h', ',', '1', '9', '8', '9', ',', '4', ',', '6', '4', ',', 'T', 'e', 'x', 'a', 's', ',', 'R', 'e', 'p', 'u', 'b', 'l', 'i', 'c', 'a', 'n', '\n')}

另外,我在引号处拆分它,因为我的一些字符串包含逗号作为名称的一部分,例如:“Carl,Jr.”

我不想导入csv模块,有没有办法呢?你知道吗


Tags: 字符串代码txtdata字典linefilenameprint
2条回答

您可以使用csv模块,如alecxe所建议的,也可以“手动”这样做:

csv_dict = {}

with open(csv_file, 'r') as f:
    for line in f:
        line = line.strip().replace('"', '').split(',')
        csv_dict[line[0]] = tuple(int(x) if x.isdigit() else str(x) for x in line[1:])

这将删除双引号,将数值转换为int,并创建元组字典。你知道吗

导致这种奇怪结果的代码中的主要问题是data变量是一个字符串,data[0]将给您第一个字符,data[1:]其余的-您需要调用split(",")首先将字符串拆分到列表中。你知道吗

I have a limitation to not import any modules.

其思想是使用split(",")将每行拆分为单独的项,并使用strip()删除项值周围的引号:

d = {}
with open(filename) as f:
    for line in f:
        items = [item.strip('"').strip() for item in line.split(",")]
        d[items[0]] = items[1:]

print(d)

印刷品:

{'Bill Clinton': ['1993', '8', '46', 'Arkansas', 'Democrat'],
 'George Bush': ['1989', '4', '64', 'Texas', 'Republican'],
 'Ronald Reagan': ['1981', '8', '69', 'California', 'Republican']}

仅供参考,使用标准库中的^{} module会使事情变得更简单:

import csv
from pprint import pprint

d = {}
with open(filename) as f:
    reader = csv.reader(f)
    for row in reader:
        d[row[0]] = row[1:]

pprint(d)

您还可以使用词典理解

d = {row[0]: row[1:] for row in reader}

相关问题 更多 >