我是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)])
答案 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
返回的类型与密钥的类型不同。您可以做两件事:
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))])
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}