python:在字典中创建一个列表

时间:2012-12-02 22:52:53

标签: python list dictionary

我刚刚开始使用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 个答案:

答案 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)