[英]I am having a bit of trouble with this hangman program. Can someone help me figure it out?
[英]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-loop
下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}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.