Python:从列表创建dict并自动生成/递增键(列表是实际的键值)?

时间:2011-11-02 01:49:33

标签: python file-io dictionary

我搜索得非常努力,无法找到一个与我想要的完全相关的问题..

我有一个名为“words”的文件,其中有大约1000行随机A-Z排序的单词...

10th
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
a
AAA
AAAS
Aarhus
Aaron
AAU
ABA
Ababa
aback
abacus
abalone
abandon
abase
abash
abate
abater
abbas
abbe
abbey
abbot
Abbott
abbreviate
abc
abdicate
abdomen
abdominal
abduct
Abe
abed
Abel
Abelian

我正在尝试将此文件加载到字典中,其中使用单词是键值,键实际上是每个单词的自动生成/自动递增

例如{0:10th,1:1st,2:2nd} ......等......等等......

下面是我到目前为止蹒跚而行的代码,似乎有点有效,但它只显示我作为唯一的dict对元素的文件中的最后一个条目

f3data = open('words')

mydict = {}

for line in f3data:
    print line.strip()
    cmyline = line.split()
    key = +1
    mydict [key] = cmyline

print mydict

7 个答案:

答案 0 :(得分:3)

key = +1

+11相同。我假设你的意思是key += 1。当每行只有一个项目时,我也看不出你为split每行的原因。

然而,你自己没有理由做循环。

with open('words') as f3data:
    mydict = dict(enumerate(line.strip() for line in f3data))

答案 1 :(得分:1)

dict(enumerate(x.rstrip() for x in f3data))

但您的错误是key += 1

答案 2 :(得分:1)

dict中使用从零开始的数字键非常可疑。考虑一个简单的list是否足够。

以下是使用list comprehension

的示例
>>> mylist = [word.strip() for word in open('/usr/share/dict/words')]
>>> mylist[1]
'A'
>>> mylist[10]
"Aaron's"
>>> mylist[100]
"Addie's"
>>> mylist[1000]
"Armand's"
>>> mylist[10000]
"Loyd's"

我使用str.strip()删除/usr/share/dict/words中的空格和换行符。您的数据可能不需要这样做。

但是,如果真的需要字典,那么Python的enumerate()内置函数就是你的朋友,你可以直接将输出传递给dict()函数创造它:

>>> mydict = dict(enumerate(word.strip() for word in open('/usr/share/dict/words')))
>>> mydict[1]
'A'
>>> mydict[10]
"Aaron's"
>>> mydict[100]
"Addie's"
>>> mydict[1000]
"Armand's"
>>> mydict[10000]
"Loyd's"

答案 3 :(得分:1)

f3data = open('words')
print f3data.readlines()

答案 4 :(得分:0)

如果密钥密集,你不需要dict,你需要一个列表。

with open('words') as fp:
    data = map(str.strip, fp.readlines())

但是,如果你真的不能没有词典生活:

with open('words') as fp:
    data = dict(enumerate(X.strip() for X in fp))

答案 5 :(得分:0)

{index: x.strip() for index, x in enumerate(open('filename.txt'))}

此代码使用字典理解和内置enumerate,它采用输入序列(在本例中为文件对象,在迭代时产生每一行)并返回索引以及项目。然后,使用索引和文本构建字典。

一个问题:如果所有密钥都是整数,为什么不使用列表呢?

最后,您的原始代码应为

f3data = open('words')

mydict = {}

for index, line in enumerate(f3data):
    cmyline = line.strip()
    mydict[index] = cmyline

print mydict

答案 6 :(得分:0)

将单词放入词典中是没有意义的。如果您使用数字作为键,则应使用列表。

from __future__ import with_statement

with open('words.txt', 'r') as f:
    lines = f.readlines()


words = {}

for n, line in enumerate(lines):
    words[n] = line.strip()

print words