我使用以下代码:
sick = {"Carson": {"Reason": "Broken leg on P coy", "Expiry": "2017-1-4"}, "Jackson": {"Reason": "Fell over tree root on exercise", "Expiry": "2017-2-3"}, "Ben": {"Reason": "Tripped", "Expiry": "2018-7-6"}}
def showsick():
print "=" * 10
print "Personnel on sick:"
for name, reason, expiry in sick.iteritems():
print name, ": ", reason, "\nSick chit expires: ", expiry, "\n"
print "=" * 10
main()若要尝试产生如下输出,请执行以下操作:
Carson: Broken leg on P coy
Sick chit expires: 2017-1-4
Jackson: Fell over tree root on exercise
Sick chit expires: 2017-2-3
Ben: Tripped
Sick chit expires: 2018-7-6但我得到了"ValueError:需要两个以上的值才能打开包“。我尝试了许多不同的东西,包括玩json (非常简单)和pprint (再次简短地),以及其他一些小东西。但我不能让它起作用
发布于 2016-10-23 22:46:29
iteritems一次只生成两对-键和值,因此您不能在for循环中将其解压缩为三个项。
相反,你想做的是:
for name in sick:
print name, ": ", sick[name]['Reason']
print "Sick chit expires: ", sick[name]['Expiry']发布于 2016-10-23 22:47:50
你生病的职能应该是:
def showsick():
print "=" * 10
print "Personnel on sick:"
for person, nested_dict in sick.iteritems():
print person, ': ', nested_dict['Reason']
print 'Sick chit expires: ', nested_dict['Expiry']
print "=" * 10代码的问题是:dict.iteritems()返回(key, value)对的元组。因此,您可以用两个变量将其包装在for中,如下所示:
for x, y in dict.iteritems():
# ^ ^ <-- only two variables, since .iteritems() returns tuple pair of 2在您的代码中,y (在我的示例中)也是一个dict。为了从它访问值,您需要执行y[key]。
样本输出:
>>> showsick()
==========
Personnel on sick:
Carson : Broken leg on P coy
Sick chit expires: 2017-1-4
Ben : Tripped
Sick chit expires: 2018-7-6
Jackson : Fell over tree root on exercise
Sick chit expires: 2017-2-3
==========https://stackoverflow.com/questions/40208525
复制相似问题