2012-10-16 73 views
1

我對字典相當陌生,所以這可能是一個相當基本的問題。Python:將常用密鑰從一個字典應用到另一個字典

比方說,我有相似的元素兩個不同的字典。 實施例:

Dictionary1 = {'Bob' : 1, 'Mary' : 2, 'Sue' : 3, 'George' : 4} 
    Dictionary2 = {'Bob' : 1, 'Sue' : 2, 'Jill' : 3, 'Isaac' : 4, 'George' : 5} 

我希望能夠採取兩個字典的交點和第一字典的索引應用到第二個。所以,我想的輸出,看起來是這樣的:

DictionaryCombo = {'Bob' : 1, 'Sue' : 3, 'George' : 4} 

請原諒我的格式爲我所需的輸出,因爲我不能確定它應該是什麼樣子,但我知道我想要的鍵值對這兩個字典的交集。

+3

請用實際的Python語法,以顯示您輸入的字典是什麼樣子,所以我們有一個[SSCCE(HTTP: //sscce.org/)。 –

+1

你可以使用實際的Python語法爲詞典澄清你的問題嗎?字典沒有訂單或自然指數。您的'Keys1'不能成爲有效的詞典鍵,因爲它是一個可變列表。使用真正的Python語法可以解決這個問題。 –

+0

嗯...我編輯了這個問題,是否正確的語法? – user1620716

回答

4

如果你想子集D1所以它只有存在於D2

d1 = {'Bob': 1, 'Mary': 2, 'Sue': 3, 'George': 4} 
d2 = {'Bob': 101, 'Sue': 102, 'Jill': 103, 'Isaac': 104, 'George': 105} 
{k: v for k, v in d1.items() if k in d2} 
# {'Bob': 1, 'Sue': 3, 'George': 4} 

或者你提到申請元素,所以你要更新D2值?

d2.update(d1) 
print d2 
# {'Sue': 3, 'Mary': 2, 'Jill': 103, 'Isaac': 104, 'Bob': 1, 'George': 4} 

或者,如果你真的開始用兩個列表(而不是先從字典的):

el1 = ['Bob', 'Mary', 'Sue', 'George'] 
el2 = ['Bob', 'Sue', 'Jill', 'Isaac', 'George'] 
dict((val, idx) for idx, val in enumerate(d1, start=1) if val in set(el2)) 
#{'Bob': 1, 'Sue': 3, 'George': 4} 

如果你有兩個列表,按鍵之一,數值之一,並希望使他們dict,那麼你可以使用zip

keys = ['Bob', 'Mary', 'Sue', 'George'] 
vals = [1, 2, 3, 4] 
dict(zip(keys, vals)) 
# {'Bob': 1, 'Mary': 2, 'Sue': 3, 'George': 4} 
+2

這是我的猜測也...但它很難從OP告訴.. –

+0

笑您大概覆蓋了大多數情況下,他可以談論現在.. –

+0

你最近的編輯是moreso我所期待的,我相信。如果這些值並不完全按照時間順序那樣呢?或者如果這些值真的只是任意數字呢? – user1620716

2

dict.viewkeys()方法提供了一組類對象,它允許容易找到的兩種常見的鑰匙字典(路口):

d1 = {'Bob' : 1, 'Mary' : 2, 'Sue' : 3, 'George' : 4} 
d2 = {'Bob' : 1, 'Sue' : 2, 'Jill' : 3, 'Isaac' : 4, 'George' : 5} 

common_keys = d1.viewkeys() & d2.viewkeys() 
dict_with_d1_values = {k: d1[k] for k in common_keys} 
# -> {'Bob': 1, 'George': 4, 'Sue': 3} 

或者,如果你確實需要這兩個值:

dict_with_combined_values = {k: (d1[k], d2[k]) for k in common_keys} 
# -> {'Bob': (1, 1), 'George': (4, 5), 'Sue': (3, 2)} 
+0

這些是非常有趣的功能!感謝您分享他們。 :) – user1620716

相關問題