“更新”字典

时间:2016-11-09 21:25:34

标签: python dictionary

当给定字典(db)时,是否有办法将值添加到字典中已存在的键中。因此,如果密钥尚不存在,则更新或简单地添加密钥及其值:

说:

{'John': [('Brown', 'Blue', 180),('Black', 'Red', 160)]}

当我更新db时,返回db将返回:

place

该定义功能如何?谢谢

3 个答案:

答案 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