3

可以说我有一个像这样的字典列表:

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__'

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

4

7 回答 7

9

values对字典使用迭代器:

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

编辑:尽管我会说,在您最初的问题中,您要求检查Type字典中的值,这有点误导。您要求的是一个名为“类型”的值的内容。这对于理解你想要什么可能是一个微妙的差异,但在编程方面却是一个相当大的差异。

在 Python 中,您应该很少需要对任何内容进行类型检查。

于 2012-05-31T15:40:18.953 回答
3

使用itervalues()检查您的字典。

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

给出:

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

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

于 2012-05-31T15:41:35.597 回答
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
于 2012-05-31T15:39:54.580 回答
1

尝试

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

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

于 2012-05-31T15:41:34.220 回答
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"
于 2012-05-31T15:46:52.393 回答
0

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

for key,  val in dictionList.items():
    #do stuff to val 
于 2012-05-31T15:42:07.780 回答
0

在字典中通过键访问会更好。在您的情况下,这两个字典对象都是如此。

for i in dictionList.keys():
    if dictionList[i]['Type'] == 'Dog':
        print i
于 2012-05-31T16:22:49.083 回答