簡體   English   中英

我在使用Python教程更新字典時遇到麻煩。 我不知道

[英]I am having trouble with a python tutorial for updating dictionaries. I can't figure it out

它說:寫一個函數add_to_dict(d,key_value_pairs),其中d是要更新的字典,而key_value_pairs是一個元組列表,其中[[key,value)]。

它給出了如下提示:您可以使用key_value_pairs中的值(例如,對於鍵)迭代對。

您將需要使用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}

由於您必須返回舊值。 因此,修改@demented刺蝟的答案,我們得到:

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

是的,這非常可疑,這是功課……好吧,我將問題解釋為要求更改列表,刪除元組,並且如果鍵已經存在,則不更新字典。

  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

讓我們分解一下:

編寫一個函數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)]
    """"

您可以使用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-loopfor-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}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM