0

辞書 user_dict があり、各ユーザー値のリストを作成します。このリストには json オブジェクトが含まれます。

user_dict[user].append(obj)

今、この辞書のすべての項目を印刷したいのですが、リストの各項目からいくつかのフィールドを選択するだけなので、辞書は次のようになります。ここには1人のユーザーのみをリストします

{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

最初に取得するアイテムは次のとおりです。これはaであり、のlikelistを使用してその要素にアクセスすることはできません。stringdict

[{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 に答える
0

の値user_dictはリストであり、辞書ではありません。アイテムが1つだけのリストのようですが、試してみてください

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 に答える