2017-07-02 4 views
-1

Ich habe eine Liste der Wörterbücher (L1) und einem Wörterbuch (D1) in Python:Vergleich der Schlüssel für Wörterbücher

L1 = [{'date': u'2017-06-14 18:46:40', 'value': u'148.01', 'id': u'8430'}, {'date': u'2017-06-14 18:46:40', 'value': u'133.03', 'id': u'681'}, {'date': u'2017-06-14 18:46:40', 'value': u'62.55', 'id': u'6151'}, {'date': u'2017-06-14 18:46:40', 'value': u'100.29', 'id': u'2089'}] 

D1 = {u'7925': [u'538'], u'7927': [u'3819', u'7307'], u'8480': [u'1772', u'1772'], u'8481': [u'4384'], u'8482': [u'4725']} 

Wie kann ich den Schlüssel in D1 auf die ID in L1 vergleichen Ich muss Zugriff auf die Liste in D1

Like:

for item in L1: 
    if item['id'] in D1: 
    print 'list: ', D1[item['id'] 
    D1LST = D1[item['id']] 
    for d in D1LST: 
    Do something 

Meine print-Anweisung zeigt nach oben blank

+0

Es hängt davon ab, was Sie tun möchten. Willst du nur sehen, ob es eine Übereinstimmung gibt? Oder willst du das passende Diktat bekommen und etwas damit machen? –

+0

Geben Sie bitte Details zu dem Problem an, das Sie zu lösen versuchen, um festzustellen, welcher Ansatz in diesem Szenario ideal wäre. Können Sie auch mehr von dem Code zeigen, den Sie versucht haben, diesen Vergleich durchzuführen, um zu sehen, wo Sie Ihre Fehler machen? – idjaw

+1

'[x für x in L1 wenn x ['id'] in D1.keys()]' –

Antwort

0

Vielleicht hilft das:

[y for x,y in D1.iteritems() for item in L1 if x in item['id']] 

Wenn Eingang:

L1 = [{'date': u'2017-06-14 18:46:40', 'value': u'148.01', 'id': u'8430'}, {'date': u'2017-06-14 18:46:40', 'value': u'133.03', 'id': u'681'}, {'date': u'2017-06-14 18:46:40', 'value': u'62.55', 'id': u'6151'}, {'date': u'2017-06-14 18:46:40', 'value': u'100.29', 'id': u'2089'}] 

D1 = {u'8430': [u'538'], u'7927': [u'3819', u'7307'], u'8480': [u'1772', u'1772'], u'8481': [u'4384'], u'8482': [u'4725']} 

Ausgang:

[[u'538']] 
+0

Ich verstehe nicht die x, y ... Ich möchte nur den passenden Schlüssel verwenden, um auf die Liste in D1 zugreifen – ChrisJ

+0

(x, y) Equi to (Schlüssel, Wert) –

0

Erhalten IDs von L1 dann Iterate D1 eine Übereinstimmung

ids = [d['id'] for d in L1] 

for k in D1.keys(): 
    if(k in ids): 
    # Whatever happens when there is a match 
+0

Ich bekomme einen schlechten Syntaxfehler bei for-Schleife – ChrisJ

+0

Achten Sie auf Ihre Einrückungen! Und nur indem ich sehe, sehe ich keine Übereinstimmung dort! –

0

ich zu finden denke, das ist, was du suchst. Iterate durch jedes Element von L1, wenn das Element id ist ein Schlüssel in D1 dann etwas tun.

for element in L1: 
    key = element['id'] 
    if key in D1: 
     # Do Other Computations 
     print D1[key] 

Der Grund, warum es nichts gedruckt wird, weil kein id in L1 in D1 existiert.

Liste der IDs in L1: [u'8430', u'681', u'6151', u'2089']

Liste der Schlüssel in D1: [u'8480', u'7927', u'8482', u'7925', u'8481']

Wie Sie sehen können, keiner von ihnen entsprechen. Es macht also Sinn, dass Ihre Ausgabe leer ist.

+0

Es funktioniert für ein bisschen, dann bekomme ich diesen Fehler key = item ['id'] TypeError: String-Indizes müssen ganze Zahlen sein – ChrisJ

Verwandte Themen