在Python中更新字典

xwbd5t1u  于 12个月前  发布在  Python
关注(0)|答案(8)|浏览(123)

我一直在这个问题上卡住了很长一段时间,只是不能弄清楚。我只是想能够理解我错过了什么,为什么需要它。我需要做的是做一个函数,将每个给定的键/值对添加到字典中。参数key_value_pairs将是一个形式为(key,value)的元组列表。

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

字符串
当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}

bbuxkriu

bbuxkriu1#

Python内置了这个特性:

>>> d = {'b': 4}
>>> d.update({'a': 2})
>>> d
{'a': 2, 'b': 4}

字符串
或者假设你不允许使用dict.update

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

2vuwiymt

2vuwiymt2#

python 3.9中,您可以使用|=update operator

>>> d = {'b': 4}
>>> d |= {'a': 2}
>>> d
{'a': 2, 'b': 4}

字符串

ilmyapht

ilmyapht3#

这里有一个更优雅的解决方案,与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}

字符串
它在Python 2和Python 3中都可以工作。
当然,更新方法

>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 3}
>>> a.update(b)
>>> a
{'a': 2, 'b': 2, 'c': 3}


但是,要小心使用后者,因为在像这里这样的误用情况下可能会导致问题

>>> 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}

dm7nw8vv

dm7nw8vv4#

Python 3.9的新版本为字典引入了两个新的运算符:union(|)和就地工会(|=).你可以使用|合并两个字典,而|=将在适当的位置更新字典。让我们考虑2个字典 d1d2

d1 = {"name": "Arun", "height": 170}
d2 = {"age": 21, "height": 170}

个字符
输出量:

{'name': 'Arun', 'height': 170, 'age': 21}


用d2更新d1

d1 |= d2
print(d1)


输出量:

{'name': 'Arun', 'height': 170, 'age': 21}


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

d1 |= {"weight": 80}
print(d1)


输出量:

{'name': 'Arun', 'height': 170, 'age': 21, 'weight': 80}

tpxzln5u

tpxzln5u5#

所以如果我理解正确的话,你想返回一个元组列表,其中包含被替换的键的(key,old_value)。
在替换旧值之前,必须保存旧值:

def add_to_dict(d, key_value_pairs):

    newinputs = [] #creates new list
    for key, value in key_value_pairs:
        if key in d:
            newinputs.append((key, d[key]))
        d[key] = value #updates element of key with value
    return newinputs

字符串

wydwbb8l

wydwbb8l6#

python dict中的每个键都对应一个值。dkey_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

字符串
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

axr492tv

axr492tv7#

如果我理解正确的话,你只想添加字典中不存在的键。下面是代码:

def add_to_dict(d, key_value_pairs):
    newinputs = [];
    for key, value in key_value_pairs:
        if key not in d.keys():
            d[key] = value
            newinputs.append((key, value));
    return newinputs

字符串
对于new key,value pairs list中的每个键,你必须检查该键是否是字典中的新键,然后才能添加它。希望这对你有帮助;)

v64noz0r

v64noz0r8#

我认为这篇文章解释得很好:Dictionary Merge and Update Operators in Python 3.9:

这里是摘要:

字典更新操作符

字典x正在被字典y更新

x.update(y)
print(x)

字符串

字典合并操作符:

将它们合并为一个。具有:

x = {"key1": "value1 from x", "key2": "value2 from x"}
y = {"key2": "value2 from y", "key3": "value3 from y"}

老办法:

z = {**x, **y}
print(z)

新方式:

z = x | y
print(z)

相关问题