Python:从列表创建字典并自动生成/递增键(列表为实际键值)?

5 投票
7 回答
15883 浏览
提问于 2025-04-17 05:27

我搜索了很久,但找不到完全符合我需求的问题。

我有一个叫“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} 这样的格式……等等等等……

下面是我目前拼凑出来的代码,似乎有点能工作,但它只显示了文件中的最后一个条目作为唯一的字典元素。

f3data = open('words')

mydict = {}

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

print mydict

7 个回答

1

在编程的世界里,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能让人感到困惑,因为我们可能不知道问题出在哪里。

有时候,解决这些问题的方法就是仔细检查我们的代码,看看是否有地方写错了,或者是否遗漏了什么重要的步骤。就像在做一道数学题时,如果结果不对,我们需要回过头去检查每一步,找出错误的地方。

此外,向其他人请教也是一个好办法。很多时候,其他人可能遇到过类似的问题,他们的经验可以帮助我们更快地找到解决方案。

总之,遇到问题时不要着急,慢慢分析,检查代码,必要时寻求帮助,这样就能更好地解决问题了。

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

在一个 dict 里使用从零开始的数字键看起来有点奇怪。你可以考虑用一个简单的 list 来代替。

下面是一个使用 列表推导式 的例子:

>>> 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
key = +1
with open('words') as f3data:
    mydict = dict(enumerate(line.strip() for line in f3data))

+11 是一样的。我猜你是想说 key += 1。我也不明白为什么你要把每一行都 split,因为每行只有一个项目。

不过,其实你完全不需要自己去做循环。

撰写回答