我刚刚开始使用python,我正在尝试创建一个程序,它将读取一个如下所示的文件:
AAA x 111
AAB x 111
AAA x 112
AAC x 123
...
该文件长50行,我正在尝试将字母变成字典中的键,以及与键对应的数字列表。
我希望输出看起来像这样:
{AAA: ['111', '112'], AAB: ['111'], AAC: [123], ...}
这就是我试过的
file = open("filename.txt", "r")
readline = file.readline().rstrip()
while readline!= "":
list = []
list = readline.split(" ")
j = list.index("x")
k = list[0:j]
v = list[j + 1:]
d = {}
if k not in d == False:
d[k] = []
d[k].append(v)
readline = file.readline().rstrip()
我的if语句一直出现语法错误,我无法弄清楚我做错了什么。
答案 0 :(得分:2)
你在if语句的末尾需要冒号;这个版本应该有效:
if k in d == False:
d[k] = []
d[k].append(v)
else:
d[k].append(v)
答案 1 :(得分:2)
使用defaultdict
>>> out = defaultdict(list)
>>> with open('test.txt') as f:
for line in f.readlines():
x = line.split()
out[x[0]].append(int(x[2]))
在可能的情况下,使用with
语句打开文件也是一种好习惯。您的原始示例有两个条目为str
,另一个条目为int
,我刚刚将所有条目转换为int
。
答案 2 :(得分:1)
你在结尾处缺少冒号,你也可以这样写:
if k not in d:
d[k] = [v]
else:
d[k].append(v)
答案 3 :(得分:1)
听起来像defaultdict的工作!除了你缺少的冒号,正如其他人所提到的,你可以用这个代替整个if
:
from collections import defaultdict # placed with your other imports, probably
....
d = defaultdict(lambda:[])
d[k].append(v)