我正在尝试将文本文件转换为字典,我可以使用defaultdict
将其转换为字典。
输出结果良好且预期。但我现在关心的是,如果我的txt文件格式不只是“:”而且还有“,”和“(间距)”,那么如何进一步分割我的值?我尝试插入更多循环,但它没有用,所以我删除了它们。
例如:
Cost : 45
Shape: Square, triangle, rectangle
Color:
red
blue
yellow
期望的输出:
{'Cost' ['45']}
{'Shape' ['Square'], ['triangle'], ['rectangle'] }
{'Color' ['red'], ['blue'], ['yellow']}
这是我目前的代码。我应该如何修改它?
#converting txt file to dictionary with key value pair
from collections import defaultdict
d = defaultdict(list)
with open("t.txt") as fin:
for line in fin:
k, v = line.strip().split(":")
d[k].append(v)
print d
答案 0 :(得分:0)
当您在其中找到包含:
的行时,您有一个键,或者您有值,因此请将值添加到最后一个键k
:
from collections import defaultdict
d = defaultdict(list)
with open("test.txt") as fin:
for line in fin:
if ":" in line:
k, v = line.rstrip().split(":")
d[k].extend(map(str.strip,v.split(",")) if v.strip() else [])
else:
d[k].append(line.rstrip())
print(d)
INOUT:
Cost : 45
Shape: Square, triangle, rectangle
Color:
red
blue
yellow
Foo : 1, 2, 3
Bar :
100
200
300
输出:
from pprint import pprint as pp
pp(d)
{'Bar ': ['100', '200', '300'],
'Color': ['red', 'blue', 'yellow'],
'Cost ': ['45'],
'Foo ': ['1', '2', '3'],
'Shape': ['Square', 'triangle', 'rectangle']}
您可以轻松更改代码以将每个值放在单个列表中,但我认为一个列表中的所有值都更有意义。