【发布时间】:2019-03-07 16:50:48
【问题描述】:
我创建了一个包含键和值的字典。读取这样的文本文件后:
test1
House: True
Car: False
Money: False
Case: 1
test2
House: True
Car: False
Money: False
Case: 2
test3
House: True
Car: False
Money: False
Case: 3
字典已创建。问题是这些值被读取为字符串。我需要将它们作为布尔值,以便稍后我可以将它们解析为 JSON 文件并将它们用作布尔值。创建的字典称为answer。我尝试了以下方法,但它只给我True 作为布尔值:
to_json = {}
block_cnt = 1
header = re.compile('[a-zA-Z0-9]')
inner = re.compile("[\t]")
empty = re.compile("[\n]",)`
with open(rDEMO_parameters.txt', 'r') as document:
for line in document:
#print line
if empty.match(line[0]):
continue
elif header.match(line[0]):
if answer:
to_json[block_cnt] = answer
#print answer
block_cnt += 1
answer = {}
elif inner.match(line[0]):
_key, value = line.split(": ")
tab, key = _key.split("\t")
answer[key] = value.split()
for key in answer.keys():
if key == "House":
answer[key] = map(bool, answer[key])
if key == "Car":
answer[key] = map(bool, answer[key])
if key == "Money":
answer[key] = map(bool, answer[key])
if key == "Case":
answer[key] = map(int, answer[key])
f = open(r"parameters.json", "w")
json.dump(to_json, f)
f.close()
然后在转换后我只得到这样的东西,但一切都在一行中:
{1
{
House: True
Car: True
Money: True
Case: [1]
} }
{2
{
House: True
Car: True
Money: True
Case: [2] } }
{3
{
House: True
Car: True
Money: True
Case: [3] }}
所以字符串全部转换为True布尔值,事实并非如此。
另一个问题是值是在列表中读取的。有什么方法可以避免吗?谢谢。
【问题讨论】:
-
请出示解析文件的代码
-
键是否有尾随空格,例如
'House '而不是'House'? -
map将bool应用于值中的每个字符,例如'False'将给[True, True, True, True, True]为bool('F') == True、bool('a') == True、bool('l') == True等。 -
显示解析文件 +1 的代码,以便我们准确查看您的答案字典。
-
@PeterWood 我输入了完整的代码、输入和输出。希望有帮助:)
标签: python dictionary boolean key-value-store