从python中的字典列表中选择一个字段

时间:2012-05-31 15:36:32

标签: python list dictionary for-loop

假设我有一个像这样的词典列表:

dictionList = {1: {'Type': 'Cat', 'Legs': 4},
               2: {'Type': 'Dog', 'Legs': 4},
               3: {'Type': 'Bird', 'Legs': 2}}

使用for循环我想遍历列表,直到我找到Type字段等于"Dog"的字典。 我最好的尝试是:

 for i in dictionList:
     if dictionList(i['Type']) == "Dog":
         print "Found dog!"

但是这给我带来了以下错误:

TypeError: 'int' object has no attribute '__getitem__'

有关如何正确执行此操作的任何想法?

7 个答案:

答案 0 :(得分:9)

values迭代器用于词典:

for v in dictionList.values():
    if v['Type']=='Dog':
         print "Found a dog!"

编辑:我会说你在原来的问题中要求检查词典中Type的值,这有点误导。您要求的是名为“类型”的的内容。这可能与理解你想要的东西有微妙的区别,但在编程方面它是一个相当大的差异。

在Python中,你应该只需要输入任何东西。

答案 1 :(得分:3)

使用itervalues()检查字典词典。

for val in dictionList.itervalues():
   if val['Type'] == 'Dog':
      print 'Dog Found'
      print val

给出:

Dog Found
{'Legs': 4, 'Type': 'Dog'}

无需使用iter / iteritems,只需检查值。

答案 2 :(得分:1)

>>> diction_list = {1: {'Type': 'Cat', 'Legs': 4},
            2: {'Type': 'Dog', 'Legs': 4},
            3: {'Type': 'Bird', 'Legs': 2}}
>>> any(d['Type'] == 'Dog' for d in diction_list.values())
True

答案 3 :(得分:1)

尝试

for i in dictionList.itervalues():
    if i['Type'] == "Dog":
        print "Found dog!"

问题在于,在您的示例中,i是整数键。使用itervalues,您可以获取键的值(也就是您想要解析的词典)。

答案 4 :(得分:1)

我认为你只是使用了错误的语法...试试这个:

>>> a = {1: {"Type": "Cat", "Legs": 4}, 2: {"Type": "Dog", "Legs": 4}, 3: {"Type": "Bird", "Legs": 2}}
>>> for item in a:
...     if a[item].get("Type") == "Dog":
...             print "Got it"

答案 5 :(得分:0)

尝试打印出i的值。它们不是你认为的那样。这样做的方法是:

for key,  val in dictionList.items():
    #do stuff to val 

答案 6 :(得分:0)

通过键进行访问在字典中更可取。在你的情况下,两个字典对象。

for i in dictionList.keys():
    if dictionList[i]['Type'] == 'Dog':
        print i