2017-07-02 195 views
-1

我的字典(L1)的列表和Python中的字典(D1):比較密鑰字典

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']} 

如何在D1的關鍵比較中L1 的ID,我需要訪問列表中D1

像:

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

我打印語句顯示空白

+0

這取決於你想要做什麼。你只想看看是否有匹配?或者你想獲得匹配的詞典並對它做些什麼? –

+0

請詳細說明您嘗試解決的問題,以確定在這種情況下哪種方法是理想的。另外,您是否可以展示更多您嘗試執行此比較的代碼,以查看您犯錯的位置? – idjaw

+1

'[x for x in L1 if x ['id'] in D1.keys()]' –

回答

0

也許這可以幫助:

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

如果輸入:

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']} 

輸出:

[[u'538']] 
+0

我不明白x,y ...我只是想用匹配鍵訪問D1 – ChrisJ

+0

(x,y)等於(key,value) –

0

獲取從L1 IDS然後迭代D1找到匹配

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

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

我得到一個壞的列表for循環的語法錯誤 – ChrisJ

+0

注意你的縮進!只是看着我看不到比賽! –

0

我認爲這是你正在尋找的東西。遍歷L1的每個元素,如果元素的idD1中的一個鍵,則執行一些操作。

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

爲什麼正在打印什麼的原因是因爲在L1沒有id存在D1。在L1 ID的

列表:鑰匙在D1[u'8430', u'681', u'6151', u'2089']

列表:[u'8480', u'7927', u'8482', u'7925', u'8481']

正如你所看到的,他們都不匹配。所以你的輸出是空的是有道理的。

+0

它工作了一下,然後我得到這個錯誤鍵= item ['id'] TypeError:字符串索引必須是整數 – ChrisJ