2017-07-28 6 views
0

Ich habe einen dict wie folgt:konnte nicht Schleife durch eine Liste von dict in Python

{ u'has_more': False, 
    u'is_limited': True, 
    u'latest': u'1501149118.071555', 
    u'messages': [ { u'text': u'--Sharp 1.9 DM\n--Modifying and testing DM script for bypassing existing sonumber validation and add line items', 
         u'ts': u'1501149054.047400', 
         u'type': u'message', 
         u'user': u'U0HN06ZB9'}, 
        { u'text': u'-- support to engineering on Licensing infra upgrade to 3.6\n - created a new key for qa on current 3.5 ubuntu 12 instance\n - added that key to the instance , created the ami and shared it with QA\n - short discussion with Navin on same', 
         u'ts': u'1501148934.002719', 
         u'type': u'message', 
         u'user': u'U02RRQJG1'}, 
        { u'inviter': u'U03FE3Z7D', 
         u'subtype': u'channel_join', 
         u'text': u'<@U0HN06ZB9|shikhar.rastogi> has joined the channel', 
         u'ts': u'1501148921.998107', 
         u'type': u'message', 
         u'user': u'U0HN06ZB9'}, 
        { u'inviter': u'U03FE3Z7D', 
         u'subtype': u'channel_join', 
         u'text': u'<@U02RRQJG1|himani> has joined the channel', 
         u'ts': u'1501148328.777625', 
         u'type': u'message', 
         u'user': u'U02RRQJG1'}, 
        { u'text': u'something like ^^^^', 
         u'ts': u'1501148318.773838', 
         u'type': u'message', 
         u'user': u'U03FE3Z7D'}, 
        { u'text': u'-- This is test \n-- Not\n-- test1\n-- Test b', 
         u'ts': u'1501148309.770614', 
         u'type': u'message', 
         u'user': u'U03FE3Z7D'}, 
        { u'text': u'<!channel> can all of you start putting some random crap in same format as shift handoff', 
         u'ts': u'1501148287.762336', 
         u'type': u'message', 
         u'user': u'U03FE3Z7D'}, 
        { u'text': u'<!channel> can all of you start putting some random crap in same format as shift handoff', 
         u'ts': u'1501148287.762161', 
         u'type': u'message', 
         u'user': u'U03FE3Z7D'}, 
        { u'text': u'sjvnsv', 
         u'ts': u'1501138569.469475', 
         u'type': u'message', 
         u'user': u'U03FE3Z7D'}, 
        { u'text': u'-- Test1 \n-- Leave this ASAP', 
         u'ts': u'1501136157.933720', 
         u'type': u'message', 
         u'user': u'U03FE3Z7D'}, 
        { u'bot_id': u'B19LZG1A5', 
         u'subtype': u'bot_message', 
         u'text': u'This is crazy', 
         u'ts': u'1501075281.418010', 
         u'type': u'message', 
         u'username': u'TEST_BOT'}], 
    u'ok': True, 
    u'oldest': u'1500820472.964970'} 

Jetzt versuche ich, zwei Dinge zu extrahieren 1. ist die user und seine text entspricht, aber irgendwie bin ich nicht in der Lage im Anschluss an diese Verwendung zu erhalten:

json_objects = json.loads(r.text) 
for i in json_objects: 
    print json_objects['messages'][i]['user'] 
    print json_objects['messages'][i]['text'] 

Die oben wirft einen Fehler:

Traceback (most recent call last): 
    File "clean_test.py", line 45, in <module> 
    get_channel_messages() 
    File "clean_test.py", line 38, in get_channel_messages 
    print json_objects['messages'][i]['user'] 
TypeError: list indices must be integers, not unicode 

oben Das sollte den user tatsächlich bekommen und ruft eine user_detail() meathod den Namen zu erhalten und kommen zurück, sobald dies geschehen ist, möchte ich den Inhalt in eine Datei in der folgenden Weise abgeladen werden Sie

username1: 
    -- text 
username2: 
    -- text2 
+0

Ich denke, dass Sie über die falsche iterierbare iterieren. versuche 'für i in json_objects ['messages']:' – nutmeg64

Antwort

4

Sie wollen über die Indizes der Liste zu durchlaufen, nicht iterieren die Schlüssel des äußeren dict

json_objects = json.loads(r.text) 
for i in range(len(json_objects['messages'])): 
    print json_objects['messages'][i]['user'] 
    print json_objects['messages'][i]['text'] 

Oder eine andere Art und Weise wäre (die Pythonic Way):

for i in json_objects['messages']: 
    print i['user'] 
    print i['text'] 
+0

Der zweite Ansatz hier ist das Iterieren der Elemente in einer Sammlung selbst (anstatt über ihre Indizes zu iterieren), ist die pythonische Lösung. –

+0

Ja, ich tat das, weil OP den anderen Weg schien, also korrigierte ich das. Ich sollte das in der Antwort hinzufügen. Vielen Dank – anon

0

Iterieren mit Wörterbuch und versuchen, auf die Liste zuzugreifen. Versuchen Sie, mit diesem

for i in json_objects['messages']: 
    print i['user'] 
    print i['text'] 
+0

das funktioniert nicht, siehe ^^ anon anser – Kittystone

+0

@Kittystone, yup stimmte zu, ich fälschlicherweise 'json_objects [' messages ']' in Druckanweisungen geschrieben ..) –

Verwandte Themen