首先,让我们看看您现有的代码做了什么。
- 每个
key都是顶级键,如“Item1”。
- 那些内部命令之一也是如此
shopItems[key],例如 {"lvlReq":10, "Cost":100, "Stock":1}`。
- 因此,每个
items都是其中一个内部字典中的一个键,例如lvlReq. 你应该从你的print items.
- 因此,每个
shopItems[key][items]都是其中一个内部字典中的一个值,例如10.
- 所以每个
values都是其中一个值的元素,比如……哎呀,10 不是可迭代的,它没有任何元素。
所以你只是走得太远了一步。
您要打印的是那些内部字典的键和值,对吗?
for key in shopItems.iterkeys():
print key,
for items in shopItems[key]:
print items, shopItems[key][items],
print
您可以通过为这些变量提供与它们实际名称相对应的名称,并在需要键时迭代键和需要键值对时迭代键值对来使这一点更清楚:
for itemname, itemdict in shopItems.iteritems():
print itemname,
for propname, propvalue in itemdict.iteritems():
print propname, propvalue,
print
无论哪种方式,你都会得到这样的东西:
Item2 Cost 200 lvlReq 20 Stock 2
Item1 Cost 100 lvlReq 10 Stock 1
当然,这与您想要的顺序不同——但那是因为字典没有任何固有的顺序;遍历字典总是以任何感觉给你的顺序给你元素。
如果这不可接受,您可能想要使用 anOrderedDict而不是 a dict,或者您可能想要在sorted某个地方调用,或者您可能想要按照您想要它们的顺序遍历您知道您想要的密钥,而不是按任何顺序排列的任何内容. 例如(也许不是您想要的确切行为,但您应该能够从这里弄清楚):
for itemname, itemdict in sorted(shopItems.iteritems()):
print itemname,
for propname in ('lvlReq', 'Cost', 'Stock'):
print propname, itemdict[propname],
print
现在,行以排序顺序显示(Item1之前也是Item2如此——但 thenItem11也是在……之前),并且列在该顺序中始终相同。Item2lvlReq Cost Stock