这是我到目前为止所做的:
var a = { exec }
// a is now { exec: exec }
这是结果
def sort_contacts(sort_contacts):
contacts = sorted(sort_contacts.items())
for (k, v) in contacts:
return list([(k,)+ v])
from test import testEqual
testEqual(sort_contacts({"Summitt, Pat":("1-865-355-4320","pat@greatcoaches.com"),
"Rudolph, Wilma": ("1-410-5313-584", "wilma@olympians.com")}),
[('Rudolph, Wilma', '1-410-5313-584', 'wilma@olympians.com'),
('Summitt, Pat', '1-865-355-4320', 'pat@greatcoaches.com')])
testEqual(sort_contacts({"Dinesen, Isak": ("1-718-939-2548", "isak@storytellers.com")}),
[('Dinesen, Isak', '1-718-939-2548', 'isak@storytellers.com')])
###############
如何修复它以便它在联系人库中抓取多个键和值
答案 0 :(得分:0)
这里的问题是您返回数据的方式。考虑一个简单的例子:
In [263]: def foo(data):
...: for k, v in sorted(data.items()):
...: return [(k, ) + v]
...:
In [264]: foo({'a' : ('b', 'c'), 'd' : ('e', 'f')})
Out[264]: [('a', 'b', 'c')]
正在发生的事情是return
语句将第一个项返回给调用者。函数返回后,它不会恢复执行并返回任何更多的项目,如您所料。因此,您只能看到返回的一个项目。
作为解决方案,有两种可能性。您可以返回list
中的所有内容,也可以使用yield
语法。
选项1
return <list>
In [271]: def foo(data):
...: return[(k,) + v for k, v in sorted(data.items())]
...:
In [272]: foo({'a' : ('b', 'c'), 'd' : ('e', 'f')})
Out[272]: [('a', 'b', 'c'), ('d', 'e', 'f')]
选项2
yield
In [269]: def foo(data):
...: for k, v in sorted(data.items()):
...: yield (k, ) + v
...:
In [270]: list(foo({'a' : ('b', 'c'), 'd' : ('e', 'f')}))
Out[270]: [('a', 'b', 'c'), ('d', 'e', 'f')]
请注意,函数调用需要list(...)
,因为yield
会返回生成器,您必须迭代才能获得最终列表结果。