shopItems = {
"Item1":{
"lvlReq":10,
"Cost":100,
"Stock":1},
"Item2":{
"lvlReq":20,
"Cost":200,
"Stock":2},
}
for key in shopItems.iterkeys():
print key,
for items in shopItems[key]:
print items,
for values in shopItems[key][items]:
print values
这给了我错误:TypeError:'int'对象不可迭代
我希望它打印出来:
Item1 lvlReq 10 Cost 100 Stock 1
Item2 lvlReq 20 Cost 200 Stock 2
答案 0 :(得分:3)
不用问为什么,这是一种使用列表理解的方法:
for k,v in shopItems.items():
print(' '.join([k]+[' '.join(map(str,i)) for i in v.items()]))
返回:
Item1 lvlReq 10 Cost 100 Stock 1
Item2 lvlReq 20 Cost 200 Stock 2
答案 1 :(得分:1)
比@AntonvBR优雅,但坚持使用代码设置...
In [59]: shopItems = {
...: "Item1":{
...: "lvlReq":10,
...: "Cost":100,
...: "Stock":1},
...:
...: "Item2":{
...: "lvlReq":20,
...: "Cost":200,
...: "Stock":2},
...: }
...:
...: for key in shopItems:
...: print(key, end=' ')
...: for items, values in shopItems[key].items():
...: print(items, values, end=' ')
...: print()
...:
...:
...:
Item1 lvlReq 10 Cost 100 Stock 1
Item2 lvlReq 20 Cost 200 Stock 2
为python2编辑:
for key in shopItems:
print key,
for items, values in shopItems[key].items():
print items, values,
print ""
答案 2 :(得分:1)
首先,让我们看一下现有代码的作用。
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
当然,这与您想要的顺序不同,但这是因为字典没有任何固有的顺序。遍历字典总是可以按照给您感觉的顺序为您提供元素。
如果不能接受,则可能要使用OrderedDict
而不是dict
,或者可能要在某个地方致电sorted
,或者可能要通过密钥您知道您想要的顺序是您想要的,而不是以任何顺序排列。例如(也许不是您想要的确切行为,但是您应该可以从这里弄清楚):
for itemname, itemdict in sorted(shopItems.iteritems()):
print itemname,
for propname in ('lvlReq', 'Cost', 'Stock'):
print propname, itemdict[propname],
print
现在行以排序顺序显示(因此Item1
在Item2
之前,但是Item11
在Item2
之前也是 …) ,并且各列始终按该顺序lvlReq Cost Stock
相同。
答案 3 :(得分:-1)
尝试:
for key in shopItems:
print(key, end=" ")
for items in shopItems[key]:
print(items, end=" ")
print(shopItems[key][items], end=" ")
print()