从文本到字典,更新键

时间:2019-06-27 16:44:38

标签: python

我有一个这种格式的文本文件:

key1 value1
key2 value2
key3 value3
key3 value4
key1 value5

我使用循环(下面的代码)创建字典。我有一个问题,在这个文本文件中有很多重复的键,但是具有不同的值。我的循环不会向现有键添加新值,但是会完全覆盖它。结果,该密钥仍然是该密钥在文件中的最后一个值。

我需要一本包含所有键及其所有值的字典。

dict = dict()
for line in file:
    line = line.split()
    if not line:
        continue
    dict[line[0]] = line[1:]

2 个答案:

答案 0 :(得分:4)

使用字典中的列表存储所有值。如果词典中还没有列表,请首先创建一个空列表。

if not line[0] in dict:
    dict[line[0]] = []
dict[line[0]].append(line[1:])

您可能还会考虑

dict[line[0]].append(" ".join(line[1:]))

如果愿意,可以撤消split()

在良好的IDE中进行编码时,IDE会警告您使用dict

Warning about shadowing of dict in PyCharm

那是什么意思?这意味着您已经重新定义了dict,并且再也无法像以前一样再次使用它:

Error using dict again

完整代码:

result = dict()
for line in ["a a", "b c", "a", "a a2"]:
    line = line.split()
    if not line:
        continue
    if not line[0] in result:
        result[line[0]] = []
    result[line[0]].append(line[1:])
print(result)

答案 1 :(得分:2)

这是您想要的:

from collections import defaultdict
d = defaultdict(list)

for line in file:
    line = line.split()
    if not line:
        continue
    d[line[0]].append(line[1:])

注意:请勿使用dict作为变量名(它是python关键字)。