1

我刚开始使用 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 语句不断出现语法错误,我无法弄清楚我做错了什么。

4

4 回答 4

2

在 if 语句的末尾需要冒号;这个版本应该可以工作:

   if k in d == False:
      d[k] = []
      d[k].append(v)
   else:
      d[k].append(v)
于 2012-12-02T22:55:27.957 回答
2

你在末尾缺少冒号,你也可以这样写:

if k not in d:
    d[k] = [v]
else:
    d[k].append(v)
于 2012-12-02T22:57:28.423 回答
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语句打开文件也是一个好习惯。您的原始示例有两个条目 asstr和一个 as int,我刚刚将所有条目转换为int此处。

于 2012-12-02T23:05:54.453 回答
1

听起来像是defaultdict的工作!除了你丢失的冒号,正如其他人所提到的,你可以if用这个替换整个:

from collections import defaultdict # placed with your other imports, probably
....
d = defaultdict(lambda:[])
d[k].append(v)
于 2012-12-02T23:01:45.107 回答