如何向现有词典中添加关键字?它没有.add()方法。


当前回答

“是否可以在Python字典创建后向其添加键?它似乎没有.add()方法。”

是的,这是可能的,它确实有一个实现这一点的方法,但您不想直接使用它。

为了演示如何使用和如何不使用它,让我们使用dict文本{}创建一个空dict:

my_dict = {}

最佳实践1:下标表示法

要用一个新的键和值更新此dict,可以使用提供项分配的下标表示法(请参阅此处的映射):

my_dict['new key'] = 'new value'

my_dict现在是:

{'new key': 'new value'}

最佳实践2:更新方法-2种方式

我们还可以使用更新方法高效地使用多个值更新dict。我们可能在这里不必要地创建了一个额外的dict,所以我们希望我们的dict已经创建,并且来自或用于其他目的:

my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dict现在是:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

使用update方法实现这一点的另一种有效方法是使用关键字参数,但由于它们必须是合法的python单词,因此不能使用空格或特殊符号,也不能以数字开头名称,但许多人认为这是为dict创建键的更易读的方法,在这里我们当然避免创建额外的不必要的dict:

my_dict.update(foo='bar', foo2='baz')

my_dict现在是:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 
 'foo': 'bar', 'foo2': 'baz'}

因此,现在我们已经介绍了三种Python方式来更新字典。


魔术方法__setitem__,以及为什么应该避免它

还有另一种不应该使用的更新dict的方法,它使用__setitem__方法。下面是一个如何使用__setitem__方法向dict添加键值对的示例,以及使用它的糟糕性能的演示:

>>> d = {}
>>> d.__setitem__('foo', 'bar')
>>> d
{'foo': 'bar'}


>>> def f():
...     d = {}
...     for i in xrange(100):
...         d['foo'] = i
... 
>>> def g():
...     d = {}
...     for i in xrange(100):
...         d.__setitem__('foo', i)
... 
>>> import timeit
>>> number = 100
>>> min(timeit.repeat(f, number=number))
0.0020880699157714844
>>> min(timeit.repeat(g, number=number))
0.005071878433227539

所以我们看到,使用下标符号实际上比使用__setitem__快得多。做Pythonic的事情,也就是说,按照预期的方式使用语言,通常既可读性更高,计算效率也更高。

其他回答

在不使用add的情况下向字典中添加关键字

        # Inserting/Updating single value
        # subscript notation method
        d['mynewkey'] = 'mynewvalue' # Updates if 'a' exists, else adds 'a'
        # OR
        d.update({'mynewkey': 'mynewvalue'})
        # OR
        d.update(dict('mynewkey'='mynewvalue'))
        # OR
        d.update('mynewkey'='mynewvalue')
        print(d)  # {'key': 'value', 'mynewkey': 'mynewvalue'}
        # To add/update multiple keys simultaneously, use d.update():
        x = {3:4, 5:6, 7:8}
        d.update(x)
        print(d) # {'key': 'value', 'mynewkey': 'mynewvalue', 3: 4, 5: 6, 7: 8}
        # update operator |= now works for dictionaries:
        d |= {'c':3,'d':4}
        # Assigning new key value pair using dictionary unpacking.
        data1 = {4:6, 9:10, 17:20}
        data2 = {20:30, 32:48, 90:100}
        data3 = { 38:"value", 99:"notvalid"}
        d = {**data1, **data2, **data3}
        # The merge operator | now works for dictionaries:
        data = data1 | {'c':3,'d':4}
        # Create a dictionary from two lists
        data = dict(zip(list_with_keys, list_with_values))

这个问题已经得到了令人恶心的回答,但自从我议论获得了很大的牵引力,以下是答案:

添加新密钥而不更新现有字典

如果您在这里试图找出如何添加键并返回新字典(而不修改现有字典),可以使用以下技术来完成

Python>=3.5

new_dict = {**mydict, 'new_key': new_val}

Python<3.5

new_dict = dict(mydict, new_key=new_val)

注意,使用这种方法,您的密钥需要遵循Python中有效标识符名称的规则。

dictionary[key] = value

dico[“new key”]=“value”

通过为字典中的键指定值,可以在字典中创建新的键/值对

d = {'key': 'value'}
print(d)  # {'key': 'value'}

d['mynewkey'] = 'mynewvalue'

print(d)  # {'key': 'value', 'mynewkey': 'mynewvalue'}

如果键不存在,则添加该键并指向该值。如果它存在,它所指向的当前值将被覆盖。