迭代二维字典以删除字典

时间:2013-09-23 01:04:59

标签: python for-loop dictionary multidimensional-array

我有一个二维关联数组(字典)。我想使用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']

5 个答案:

答案 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 [ '名称']