How do I extend the values of a specific dictionary item with overlapping keys?
本问题已经有最佳答案,请猛点这里访问。
所以我有一本字典"db",它等于
1 2 3 4 | {('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)]} |
我需要创建一个函数来获取数据库、名称、性别、年份、计数和排名(有时可能等于无),并用新信息更新字典数据库。这是我到目前为止所拥有的。
1 2 3 | def add_name(db, name, gender, year, count, rank=None): db.update({(name, gender): [(year, count, rank)]}) return None |
号
但是,问题是,如果我添加一个在db中已经存在键的项,例如"('bob','male')",则.update方法将覆盖与该键关联的值,并用函数中的值替换它们。
如果键重叠,如何简单地追加值?
您可以使用
1 2 3 | def add_name(db, name, gender, year, count, rank=None): db.setdefault((name, gender), []).append((year, count, rank)) return None |
或者使用
1 2 3 4 5 6 | 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键并附加到现有列表:
1 2 3 4 5 | 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)]}) |
号
这将检查数据库中是否存在该项,如果存在,则追加该项。顺便问一下,你为什么还
试试这个:
1 2 3 4 5 6 7 8 | 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 |