list indices必须是整数python

时间:2012-06-12 18:26:09

标签: python

我有一个字典user_dict,并为每个用户值创建一个列表,这个列表包含json对象:

user_dict[user].append(obj)

现在我要打印这个字典中的所有项目,但只从列表中的每个项目中选择一些字段,所以字典是这样的,我只在这里列出一个用户

{u'user1':[{u'host_dst': {u'addr': u'195.149.144.60', u'vid': 0, u'port': 80},

            'usi': '7932fee11ba72ae84180044d75521368', u'host_src': {u'addr': u'83.233.59.215', 

            u'vid': 0, u'port': 51068},item2...]}

我做的是:

for item in user_dict.values():
    fd_out1.write("%s\t%s\n" % (item["host_dst"][addr],item["host_dst"]["vid"]))

然后它返回:

TypeError: list indices must be integers, not str

以前例如,我使用obj [“host_dst”] [addr]来表示值195.149.144.60,它工作正常,但是当我想要打印出来的东西时,它无法工作。有人可以帮忙吗?非常感谢!!

3 个答案:

答案 0 :(得分:2)

你错过了帖子中的括号

正确格式化后,您的数据如下所示

{
  u'user1': [
                {
                  u'host_dst': {
                                  u'addr': u'195.149.144.60',
                                  u'vid': 0,
                                  u'port': 80
                               },

                  'usi': '7932fee11ba72ae84180044d75521368',
                  u'host_src': {
                                  u'addr': u'83.233.59.215', 
                                  u'vid': 0, 
                                  u'port': 51068
                                }
                 },
                item2,
                ...
           ]
}

因此循环中的每个item都是list

你应该打印出类似item[0]["host_dst"][addr]

的内容

答案 1 :(得分:0)

user_dict的值是列表,而不是字典。看来它可能只是一个包含一个项目的列表,所以请尝试

for item in user_dict.values():
    fd_out1.write("%s\t%s\n" % (item[0]["host_dst"][addr],item[0]["host_dst"]["vid"]))

答案 2 :(得分:0)

您检索的第一个项目是list,您无法使用string中的dict来访问其元素。

[{u'host_dst': {u'addr': u'195.149.144.60', u'vid': 0, u'port': 80},
        'usi': '7932fee11ba72ae84180044d75521368', u'host_src': {u'addr': '83.233.59.215', 
        'u'vid': 0, u'port': 51068},item2...]}

您应该使用integer