1

假设我有一个数据文件,其中一个字符串(比如'a,'b','c'...)出现多次。我希望使用 'a' 和 'b' 作为键,它们有多个关联的值。

如果我的字典是 dict,并且我使用dict1.update({'a':1})后跟dict1.update[{'a':2}],则 2 会覆盖值 1。但是,我不能使用dict['a'].append([2]),除非密钥“a”已经在文件中。

因此,我正在寻找某种方法来检查一个键是否已经在我的列表中,在这种情况下我使用追加,或者如果不是,则使用更新。在这种情况下可以使用的简单条件语句是什么?

4

4 回答 4

2

有两种方法:

  1. 采用defaultdict
  2. 使用你自己的 defaultdict 实现

假设您的文件如下所示:

a 1
b 4
a 2
...

然后你可以这样做:

import collections 
answer = collections.defaultdict(list) 
with open('path/to/file') as infile:
    for line in infile:
        key, value = line.strip().split()
        answer[key].append(value)

如果您不想使用 defaultdict,则:

answer = {}
with open('path/to/file') as infile:
    for line in infile:
        key, value = line.strip().split()
        if key not in answer:
            answer[key] = []
        answer[key].append(value)

希望这可以帮助

于 2013-07-25T22:41:54.733 回答
1

使用默认字典

例子:

from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)

基本上,您使用工厂函数对其进行初始化,该函数将返回“默认”值应该是什么,并且当您尝试通过键从字典中获取项目时,如果该键尚不存在,它将运行该函数。在这种情况下,它将返回一个空列表。

于 2013-07-25T22:37:02.187 回答
0

要检查 dict 是否有键,您可以执行dict.has_key('a')

于 2013-07-25T22:37:32.117 回答
0
dict1 = dict.fromkeys(st,[]) # where st is your string.
dict1['a'].append(1)
dict1['a'].append(2)
于 2013-07-25T22:38:08.747 回答