Python 结合使用字典的update和append

Python 结合使用字典的update和append,python,Python,假设我有一个数据文件,其中有一个字符串(比如“a”、“b”、“c…”)多次出现。我希望使用“a”和“b”作为键,它们有多个与之关联的值 如果我的字典是dict,我使用dict1.update({'a':1})后跟dict1.update[{'a':2}],则2会覆盖值1。但是,我不能使用dict['a'].append([2]),除非密钥“a”已经在文件中 因此,我正在寻找某种方法来检查一个键是否已经在我的列表中,在这种情况下,我使用append,或者如果没有,使用update。在这种情况下,什

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

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

因此,我正在寻找某种方法来检查一个键是否已经在我的列表中,在这种情况下,我使用append,或者如果没有,使用update。在这种情况下,什么是简单的条件语句?

使用

例如:

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

基本上,您可以使用一个工厂函数来初始化它,该函数将返回“默认”值,当您尝试按键从字典中获取项时,如果该键尚不存在,它将运行该函数。在这种情况下,它将返回一个空列表。

要检查dict是否有键,可以执行
dict.has_key('a')
有两种方法:

  • 使用
  • 使用您自己的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)
    

    希望这对您有所帮助

    在这种情况下,输入“list”是什么?
    list
    是内置函数
    list()
    ,如果您尝试在解释器上运行,您将看到它返回一个空列表。请注意,您应该省去括号,因为您不希望在创建defaultdict时调用函数,而是希望为该对象提供对函数的引用,以便它可以在每次需要创建默认值时调用它<代码>列表可以替换为任何返回字典默认值的函数(无论它是内置的还是自己定义的,只要它不带任何参数)。
    dict.fromkeys(x,[])
    的工作方式与您期望的不符。它将创建一个字典,其中包含与同一列表对象关联的所有键。向该列表添加内容对象将在任何地方添加:哦。我不知道。除了defaultDict之外,还有什么补救方法吗?有很多方法可以做到这一点,包括字典理解
    {k:[]for k in keys}
    。不,我是说使用fromkeys。基本上这里有人告诉我这件事,我觉得这件很漂亮。尽管defaultDict看起来更加圆滑
    dict.fromkeys()
    的第二个参数只能合理地是不可变的值,因此在这种特殊情况下没有合理的方法使用
    dict.fromkeys()
    has_key()
    现在已经被弃用很久了。改为使用my_dict中的
    键,或者在这种情况下使用
    dict.setdefault()
    collections.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)