如何将文本文件的每一行转换为词典条目?

时间:2019-09-19 11:03:32

标签: python dictionary

我是Python的新手。 目前,我有一个名为“ action_table2.txt”的文本文件,其内容如下所示:

1: Goals
2: Dreams
3: Environment
4: Outside
5: Inside
6: Reality
7: Allies
8: Enemies
9: Evil
10: Good
...

我想将每一行变成一个键:在名为action_table2的字典中的值条目,但是以这种速率,我知道的唯一方法是将表复制并粘贴到python中,然后手动键入引号在每个“值”之外,然后在每个值后手动添加逗号。这非常繁琐(特别是因为我要对多个表执行此操作)。

我尝试用格式打印每行,因此我可以按照自己想要的方式复制并粘贴已经格式化的行,但是我看不到如何添加引号,只是逗号或其他文本。

我也尝试过以下代码:

action_table2 = {}
with open('action_table2.txt') as f:
    for line in f:
        key, value = line.strip().split(':')
        action_table2[key] = (value)

但是当我尝试检索密钥时,出现密钥错误。 (这是我尝试检索它时的样子:)

import random
print(action_table2[random.randint(1,100)])

2 个答案:

答案 0 :(得分:2)

您需要将键从字符串转换为整数。

action_table2 = {}
with open('action_table2.txt') as f:
    for line in f:
        key, value = line.strip().split(':')
        action_table2[int(key)] = (value)

答案 1 :(得分:1)

问题在于rand.randint返回的类型与密钥的类型不同。您可以做两件事:

1)以整数形式转换字典键:

import random 

action_table2 = {}
with open('action_table2.txt') as f:
    for line in f:
        key, value = line.strip().split(': ')
        action_table2[int(key)] = value

print(action_table2[random.randint(1, len(action_table2))])

2)将random.randint返回的键的值强制转换为字符串:

import random 

action_table2 = {}
with open('action_table2.txt') as f:
    for line in f:
        key, value = line.strip().split(': ')
        action_table2[key] = value

print(action_table2[str(random.randint(1, len(action_table2)))])

注意

  • 在两种情况下,我都将split(":")替换为split(": "),以避免空格作为值的第一个字符

  • 如果您愿意,还可以使用dict理解来解决您的问题:

    action_table2 = {s.split(':')[0]: s.strip().split(': ')[1] for s in f}