我有一个二维关联数组(字典)。我想使用for循环迭代第一维,并在每次迭代时提取第二维的字典。
例如:
#!/usr/bin/python
doubleDict = dict()
doubleDict['one'] = dict()
doubleDict['one']['type'] = 'animal'
doubleDict['one']['name'] = 'joe'
doubleDict['one']['species'] = 'monkey'
doubleDict['two'] = dict()
doubleDict['two']['type'] = 'plant'
doubleDict['two']['name'] = 'moe'
doubleDict['two']['species'] = 'oak'
for thing in doubleDict:
print thing
print thing['type']
print thing['name']
print thing['species']
我想要的输出:
{'type': 'plant', 'name': 'moe', 'species': 'oak'}
plant
moe
oak
我的实际输出:
two
Traceback (most recent call last):
File "./test.py", line 16, in <module>
print thing['type']
TypeError: string indices must be integers, not str
我错过了什么?
PS我知道我可以做for k,v in doubleDict
,但我真的试图避免做长if k == 'type': ... elif k == 'name': ...
语句。我希望能够直接致电thing['type']
。
答案 0 :(得分:4)
当你遍历字典时,你会遍历它的键,而不是它的值。要获取嵌套值,您必须执行以下操作:
for thing in doubleDict:
print doubleDict[thing]
print doubleDict[thing]['type']
print doubleDict[thing]['name']
print doubleDict[thing]['species']
答案 1 :(得分:3)
dict
中的for循环遍历键而不是值。
迭代值do:
for thing in doubleDict.itervalues():
print thing
print thing['type']
print thing['name']
print thing['species']
我使用了完全相同的代码,但最后添加了.itervalues()
,这意味着:“我想迭代这些值。”
答案 2 :(得分:2)
获取嵌套结果的一般方法:
for thing in doubleDict.values():
print(thing)
for vals in thing.values():
print(vals)
或
for thing in doubleDict.values():
print(thing)
print('\n'.join(thing.values()))
答案 3 :(得分:0)
您可以使用@Haidro的答案,但使用双循环使其更通用:
for key1 in doubleDict:
print(doubleDict[key1])
for key2 in doubleDict[key1]:
print(doubleDict[key1][key2])
{'type': 'plant', 'name': 'moe', 'species': 'oak'}
plant
moe
oak
{'type': 'animal', 'name': 'joe', 'species': 'monkey'}
animal
joe
monkey
答案 4 :(得分:0)
这些都可以工作......但是看看你的代码,为什么不使用一个命名的元组呢?
来自集合的导入了namedtuple
LivingThing = namedtuple('LivingThing','type name species')
doubledict ['one'] = LivingThing(type ='animal',name ='joe',species ='monkey')
doubledict [ '一个']。名 doubledict [ '一'] ._ asdict [ '名称']