0

我有一个字典,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,效果很好,但是这里当我想打印一些东西的时候就不行了。任何人都可以帮忙吗?非常感谢!!

4

3 回答 3

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]

于 2012-06-12T18:38:35.003 回答
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"]))
于 2012-06-12T18:29:29.983 回答
0

您检索的第一个项目是以下内容,它是 alist并且您无法使用 astring中的 a访问其元素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.

于 2012-06-12T18:31:44.303 回答