Python 如何使用重叠键扩展特定字典项的值?

Python 如何使用重叠键扩展特定字典项的值?,python,database,list,dictionary,tuples,Python,Database,List,Dictionary,Tuples,所以我有一个字典“db”,它等于 {('ALI', 'MALE'): [(2011, 200, None), (2012, 200, None), (2013, 200, None), (2014, 200, None), (2015, 200, None)], ('BOB', 'MALE'): [(2012, 200, None), (2013, 200, None), (2014, 200, None)], ('LUKE', 'MALE'): [(2013, 200, None), (

所以我有一个字典“db”,它等于

{('ALI', 'MALE'): [(2011, 200, None), (2012, 200, None), (2013, 200, None), 
(2014, 200, None), (2015, 200, None)], ('BOB', 'MALE'): [(2012, 200, None), 
(2013, 200, None), (2014, 200, None)], ('LUKE', 'MALE'): [(2013, 200, None), 
(2015, 200, None)], ('JEFF', 'MALE'): [(2014, 200, None)]}
我需要创建一个函数来获取数据库、姓名、性别、年份、计数和排名(有时可能不等于零),并用新信息更新字典数据库。这是我到目前为止所拥有的

def add_name(db, name, gender, year, count, rank=None):
    db.update({(name, gender): [(year, count, rank)]})
    return None
然而,问题是,如果我添加了一个项,该项的键已经存在于数据库中,例如“('BOB','MALE')”,那么.update方法将覆盖与该键关联的值,并用函数中的值替换它们

如果键重叠,我如何简单地附加值呢?

试试以下方法:

def add_name(db, name, gender, year, count, rank=None):
    # check if the key (name, gender) in db. if it's in, append
    if (name, gender) in db:
        db[(name, gender)].append((year, count, rank))
    # else new a key
    else:
        db[(name, gender)] = [(year, count, rank)]
    return None
试试这个:

def add_name(db, name, gender, year, count, rank=None):
    # check if the key (name, gender) in db. if it's in, append
    if (name, gender) in db:
        db[(name, gender)].append((year, count, rank))
    # else new a key
    else:
        db[(name, gender)] = [(year, count, rank)]
    return None

在扩展列表的情况下,您需要访问dict键并附加到现有列表:

def add_name(db, name, gender, year, count, rank=None):
    if (db, name) in db:
        db[(name, gender)].append((year, count, rank))
    else:
        db.update({(name, gender): [(year, count, rank)]})
这将检查该项是否存在于数据库中,如果存在则追加。
顺便问一下,为什么返回
None
?扩展列表时,不必从函数返回某些内容,您需要访问dict键并附加到现有列表:

def add_name(db, name, gender, year, count, rank=None):
    if (db, name) in db:
        db[(name, gender)].append((year, count, rank))
    else:
        db.update({(name, gender): [(year, count, rank)]})
这将检查该项是否存在于数据库中,如果存在则追加。 顺便问一下,为什么返回
None
?您不必从函数返回某些内容,您可以使用:

或者使用a开头:

from collections import defaultdict
db = defaultdict(list)

def add_name(db, name, gender, year, count, rank=None):
    db[(name, gender)].append((year, count, rank))
    return None
您可以使用:

或者使用a开头:

from collections import defaultdict
db = defaultdict(list)

def add_name(db, name, gender, year, count, rank=None):
    db[(name, gender)].append((year, count, rank))
    return None

谢谢,这很有道理。这个解决方案有一个警告。如何使这些值只在它们的键已经存在并且dict中没有重复的值时才被追加?实际上,我通过简单地添加另一个嵌套的if语句解决了这个问题。谢谢大家!@鲁卡鲁卡,你很受欢迎,汉克斯,这很有道理。这个解决方案有一个警告。如何使这些值只在它们的键已经存在并且dict中没有重复的值时才被追加?实际上,我通过简单地添加另一个嵌套的if语句解决了这个问题。谢谢大家!@鲁卡鲁卡,不客气