我有一个字典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,它工作正常,但是当我想要打印出来的东西时,它无法工作。有人可以帮忙吗?非常感谢!!
答案 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
。