我在使用用于更新字典的 python 教程时遇到问题。我想不通



它说:写一个add_to_dict(d, key_value_pairs)函数,其中d是一个要更新的字典,key_value_pairs是一个元组列表,其中[(key, value)].

它给出了如下提示:您可以使用,例如,对于key,在key_value_pairs中使用value来迭代对。

您需要使用append创建一个列表。

它还给出了应该发生的事情(输入和输出)的示例:

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}

因为必须返回旧值。所以修改@痴呆刺猬的答案我们得到:

>>> def add_to_dict(d, kvlist):
...     out = []
...     for key, value in kvlist:
...         if key in d:
...            out.append((key, d[key]))
...         d[key] = value
...     return out
... 
>>> d = { 'a': 0, 'b': 4 } 
>>> add_to_dict(d, [('a', 2), ])
[('a', 0)]
>>> print(d)
{'a': 2, 'b': 4}

闻起来像作业,但他们…

def add_to_dict(d, kvlist):
    for key, value in kvlist:
        d[key] = value
d = { 'a': 0, 'b': 4 } 
add_to_dict(d, [('a', 2), ])
print(d)
{'a': 2, 'b': 4}

让我们来分析一下:

写一个函数add_to_dict(d, key_value_pairs)

def add_to_dict(d, key_value_pairs):
    """
    'd' is a dictionary to be updated
    'key_value_pairs' is a list of tuples where [(key, value)]
    """"

可以用for key, value in来遍历对key_value_pairs .

def add_to_dict(d, key_value_pairs):
    """
    d is a dictionary to be updated
    key_value_pairs is a list of tuples where [(key, value)]
    """
    for key, value in key_value_pairs:
        pass

您需要使用append创建一个列表。

def add_to_dict(d, key_value_pairs):
    """
    d is a dictionary to be updated
    key_value_pairs is a list of tuples where [(key, value)]
    """
    for key, value in key_value_pairs:
        pass
my_dict = {}
my_list = []
my_list.append(('key1', 10))
my_list.append(('key2', 20))
add_to_dict(my_dict, my_list)

现在我们要做的就是在函数的for-loop下面是什么。这是:

def add_to_dict(d, key_value_pairs):
    """
    d is a dictionary to be updated
    key_value_pairs is a list of tuples where [(key, value)]
    """
    for key, value in key_value_pairs:
        d[key] = value
my_dict = {}  # we create a empty dict to be updated
my_list = []  # we create a empty list to append
my_list.append(('key1', 10))  # append the first key, value pair
my_list.append(('key2', 20))  # append the second key, value pair
add_to_dict(my_dict, my_list)  #call the function, and pass the dict and list as arguments.
print my_dict  # see the result

结果是:

{'key2': 20, 'key1': 10}
编辑:

现在我注意到函数的期望输出/结果是:
[] {'a': 2}
[] {'a': 2, 'b': 4}
[('a', 2)] {'a': 2}

这很奇怪,因为函数应该要么返回一些东西而不改变全局状态,要么改变全局状态而不返回任何东西。

但是如果这是教程想要的,下面是代码的样子:

def add_to_dict(d, key_value_pairs):
    """
    d is a dictionary to be updated
    key_value_pairs is a list of tuples where [(key, value)]
    """
    out = []
    for key, value in key_value_pairs:
        if key in d:
            out.append((key, value))
        d[key] = value
    return out
d = {}
print "->", add_to_dict(d, [('a',2)]),  # -> [], d -> {'a':2}
print "d ->", d
d = {'b':4}
print "->", add_to_dict(d, [('a',2)]),  # -> [], d -> {'a':2,'b':4}
print "d ->", d
d = {'a':0}
print "->", add_to_dict(d, [('a',2)]),  # -> [('a',0)], d -> {'a':2}
print "d ->", d

返回:

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

是啊,很怀疑这是作业…嗯,我把这个问题解释为需要修改列表,删除元组,如果键已经存在,则不更新字典。

  def add_to_dict(d, kvlist):
      rejected = []
      while len(kvlist) > 0:
           key, value = kvlist.pop()
           if d.has_key(key):
                rejected.append((key, value))
           d[key] = value
      return rejected

相关内容

最新更新