在python中更新字典

Kan*_*wag 1 python dictionary python-3.x

我已经坚持这个问题很长一段时间了,只是想不出来.我只是希望能够理解我所缺少的东西以及为什么需要它.我需要做的是创建一个函数,将每个给定的键/值对添加到字典中.参数key_value_pairs将是表单(键,值)中的元组列表.

def add_to_dict(d, key_value_pairs):

    newinputs = [] #creates new list
    for key, value in key_value_pairs:
        d[key] = value #updates element of key with value
        if key in key_value_pairs:
            newinputs.append((d[key], value)) #adds d[key and value to list
    return newinputs
Run Code Online (Sandbox Code Playgroud)

当d和key_value_pairs有不同的键时,我无法弄清楚如何更新"value"变量.

前三个方案有效,但其余方案都失败了

>>> d = {}
>>> add_to_dict(d, [])
[]
>>> d
{}

>>> d = {}
>>> add_to_dict(d, [('a', 2])
[]
>>> d
{'a': 2}

>>> d = {'b': 4}
>>> add_to_dict(d, [('a', 2)])
[]
>>> d
{'a':2, 'b':4}

>>> d = {'a': 0}
>>> add_to_dict(d, [('a', 2)])
[('a', 0)]
>>> d
{'a':2}

>>> d = {'a', 0, 'b': 1}
>>> add_to_dict(d, [('a', 2), ('b': 4)])
[('a', 2), ('b': 1)]
>>> d
{'a': 2, 'b': 4}

>>> d = {'a': 0}
>>> add_to_dict(d, [('a', 1), ('a': 2)])
[('a', 0), ('a':1)]
>>> d
{'a': 2}
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑.

Nik*_*vin 10

使用python 3.9,您可以使用|= 更新运算符

>>> d = {'b': 4}
>>> d |= {'a': 2}
>>> d
{'a': 2, 'b': 4}
Run Code Online (Sandbox Code Playgroud)


aru*_*n a 10

Python3.9新版本引入了两个新的字典运算符:并集(|)和就地并集(|=)。您可以使用 | 合并两个字典,而 |= 将就地更新字典。让我们考虑 2 个字典d1d2

d1 = {"name": "Arun", "height": 170}
d2 = {"age": 21, "height": 170}
Run Code Online (Sandbox Code Playgroud)
d3 = d1 | d2 # d3 is the union of d1 and d2
print(d3)
Run Code Online (Sandbox Code Playgroud)

输出:

{'name': 'Arun', 'height': 170, 'age': 21}
Run Code Online (Sandbox Code Playgroud)

用 d2 更新 d1

d1 |= d2
print(d1)
Run Code Online (Sandbox Code Playgroud)

输出:

{'name': 'Arun', 'height': 170, 'age': 21}
Run Code Online (Sandbox Code Playgroud)

您可以使用新的密钥权重更新 d1,如下所示

d1 |= {"weight": 80}
print(d1)
Run Code Online (Sandbox Code Playgroud)

输出:

{'name': 'Arun', 'height': 170, 'age': 21, 'weight': 80}
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 9

Python内置了这个功能:

>>> d = {'b': 4}
>>> d.update({'a': 2})
>>> d
{'a': 2, 'b': 4}
Run Code Online (Sandbox Code Playgroud)

或者给你不允许使用dict.update:

>>> d = dict(d.items() + {'a': 2}.items())   # doesn't work in python 3
Run Code Online (Sandbox Code Playgroud)


Nik*_*Nik 8

与 Eric 的第二个片段相比,这是一个更优雅的解决方案

>>> a = {'a' : 1, 'b' : 2}
>>> b = {'a' : 2, 'c' : 3}
>>> c = dict(a, **b)
>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 3}
>>> c
{'a': 2, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)

它适用于 Python 2 和 3

当然,更新方法

>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 3}
>>> a.update(b)
>>> a
{'a': 2, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)

但是,请小心后者,因为如果像这里这样滥用可能会导致问题

>>> a = {'a' : 1, 'b' : 2}
>>> b = {'a' : 2, 'c' : 3}
>>> c = a
>>> c.update(b)
>>> a
{'a': 2, 'b': 2, 'c': 3}
>>> b
{'a': 2, 'c': 3}
>>> c
{'a': 2, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)


Eve*_*sle 0

python 中的每个键都dict对应一个值。d和具有不同键的情况key_value_pairs不是相同的元素。

是否newinputs应该包含以前不存在的键/值对d?如果是这样:

def add_to_dict(d, key_value_pairs):
  newinputs = []
  for key, value in key_value_pairs:
    if key not in d:
      newinputs.append((key, value))
    d[key] = value
  return newinputs
Run Code Online (Sandbox Code Playgroud)

是否newinputs应该包含键所在然后更改的键/d对?如果是这样:

def add_to_dict(d, key_value_pairs):
  newinputs = []
  for key, value in key_value_pairs:
    if key in d:
      newinputs.append((key, value))
    d[key] = value
  return newinputs
Run Code Online (Sandbox Code Playgroud)