当给定字典(db)时,是否有办法将值添加到字典中已存在的键中。因此,如果密钥尚不存在,则更新或简单地添加密钥及其值:
说:
{'John': [('Brown', 'Blue', 180),('Black', 'Red', 160)]}
当我更新db时,返回db将返回:
place
该定义功能如何?谢谢
答案 0 :(得分:1)
我认为蛮力方法是最好的。它仍然短暂而直接
def add_anything(d, key, *value):
if key in d:
if value not in d[key]:
d[key].append(value)
else:
d[key] = [value]
运行一些测试
>>> add_anything(d, 'bob', 'Brown', 'Blue', '180')
>>> d
{'bob': [('Brown', 'Blue', '180')]}
>>> add_anything(d, 'bob', 'Brown', 'Blue', '180')
>>> d
{'bob': [('Brown', 'Blue', '180')]}
>>> add_anything(d, 'bob', 'Brown', 'Blue', '666')
>>> d
{'bob': [('Brown', 'Blue', '180'), ('Brown', 'Blue', '666')]}
>>> add_anything(d, 'jane', 'Brown', 'Blue', '666')
>>> d
{'jane': [('Brown', 'Blue', '666')], 'bob': [('Brown', 'Blue', '180'), ('Brown', 'Blue', '666')]}
答案 1 :(得分:0)
使用set
来防止重复,但代价是丢失了我认为不重要的顺序:
>>> from collections import defaultdict
>>> db = defaultdict(set)
>>> db['John'].add(('Brown', 'Blue', 180))
>>> db
defaultdict(<type 'set'>, {'John': set([('Brown', 'Blue', 180)])})
>>> db['John'].add(('Brown', 'Blue', 180))
>>> db
defaultdict(<type 'set'>, {'John': set([('Brown', 'Blue', 180)])})
>>> db['John'].add(("Black", "Red", "160"))
>>> db['Jane'].add(("Red", "Gree", "140"))
>>> db
defaultdict(<type 'set'>, {'Jane': set([('Red', 'Gree', '140')]), 'John': set([('Brown', 'Blue', 180), ('Black', 'Red', '160')])})
答案 2 :(得分:0)
可能会遗漏一些东西,但速度更快/尝试(先做,然后请求原谅)?
d = {'John': [('Brown', 'Blue', 180)]}
def add_to_dict(d, k, v):
try:
d[k].append(v)
except KeyError:
d[k] = [v]
return d
print(d)
add_to_dict(d, "John", ('Black', 'Red', 160))
print(d)
add_to_dict(d, "Jim", ('Blond', 'Green', 200))
print(d)
add_to_dict(d, "Jim", ('Blond', 'Green', 220))
print(d)
或检查较慢(请求获得许可)?
def add_to_dict(d, k, v):
if k in d.keys():
d[k].append(v)
else:
d[k] = [v]
return d