2012-03-31 77 views
1

這可能是一個非常天真的問題。我想通過比較兩個庫的值:減法值兩個字典python

distance = dictionary1[position] - dictionary2[position] 

,但它不能正常工作,它給我的dictionary1的第一個值。

我也試圖與:

set distance = set(dictionary1[position]) - set(dictionary2[position]) 

,但得到了同樣的結果。

任何想法如何從兩個字典的值可以減去?

字典1和2是這樣的:

dictionary1 = {'chr1': '3434351', 'chr10': '5329532', 'chr11': '2355620', 
       'chr12': '40841359', 'chr13': '101523938', 'chr14': '453255816', 
       'chr17': '491453323', 'chr18': '22361089', 'chr19': '34965774', 
       'chr2': '16025716', 'chr20': '295671539', 'chr21': '2067974'} 

dictionary2 = {'chr1': '15845763', 'chr10': '186537818', 'chr11': '3715102', 
       'chr12': '1138647613', 'chr13': '123235062', 'chr14': '68159413', 
       'chr15': '51790735', 'chr16': '19324170', 'chr17': '78184979', 
       'chr18': '76968073', 'chr19': '37299170', 'chr2': '18329102', 
       'chr20': '31934245', 'chr22': '32679692'} 
+2

你的問題不是很清楚,我。請舉例輸入和輸出。 – 2012-03-31 22:11:45

+0

你可以發佈'print dictionary1'和'print dictionary2'的輸出嗎? – Blender 2012-03-31 22:13:29

+0

如果字典中的值具有在其上定義的減法,那麼這應該起作用。然而,它不起作用,所以我們需要知道字典中有什麼樣的價值。 – aaronasterling 2012-03-31 22:13:49

回答

0

我不得不使用一種解決方法來解決其不是在兩個字典密鑰的問題。你應該在你方便的時候照顧這個。當密鑰不存在時,我將該值設置爲零。

keys = dictionary1.keys() 
keys.extend(dictionary2.keys()) 

keys = set(keys) 
dic = dict() 
for key in keys: 
    dic[key] = int(dictionary1.get(key,0)) - int(dictionary2.get(key,0)) 

print dic  

產量:

{'chr2': -2303386, 'chr1': -12411412, 'chr21': 2067974, 'chr13': -21711124, 'chr 
12': -1097806254, 'chr11': -1359482, 'chr10': -181208286, 'chr17': 413268344, 'c 
hr16': -19324170, 'chr15': -51790735, 'chr14': 385096403, 'chr20': 263737294, 'c 
hr22': -32679692, 'chr19': -2333396, 'chr18': -54606984} 

編輯作爲尼克拉斯B.表示他的評論也coud使用dictionary comprehensions。然而,他們不可用蟒蛇< 2.7。

+1

此代碼相當於集合(d1)中的k的'dic = {k:int(d1.get(k,0)) - int(d2.get(k,0))。設置(d2)}'。歡呼聲:) – 2012-03-31 23:32:09

+0

@NiklasB。對於集合中的k(d1)|設置(d2)'我喜歡那個! – joaquin 2012-04-01 05:57:27

0
dictionary1 = {'chr1': '3434351', 'chr10': '5329532', 'chr11': '2355620', 
      'chr12': '40841359', 'chr13': '101523938', 'chr14': '453255816'} 
dictionary2 = {'chr1': '15845763', 'chr10': '186537818', 'chr11': '3715102', 
      'chr12': '1138647613', 'chr13': '123235062', 'chr14': '68159413'} 

dictionary3 = {} 

# Assuming dictionary1 and dictoinary2 are the same size and have the same key 
for key in dictionary1.keys(): 
    if key in dictionary1: 
     if key in dictionary2: 
      # Calculate the new value for dictionary3, by using int() 
      newValue = int(dictionary1[key]) - int(dictionary2[key]) 
      dictionary3[key] = newValue 
     else: 
      print(key, 'is not in dictionary2') 
    else: 
     print(key, 'is not in dictionary1') 

print(dictionary3) 

輸出

{'chr1': -12411412, 'chr13': -21711124, 'chr12': -1097806254, 
'chr11': -1359482, 'chr10': -181208286, 'chr14': 385096403} 

我認爲你可以使用int(),然後你可以把它們作爲整數。我認爲這是做這件事的最直接的方法之一。當然,提供檢查以確保存在相同的密鑰(chr1x)也是不錯的主意,否則它會給你錯誤,或者你必須弄清楚什麼。

3

使用字典理解:

{ k:int(dic1[k]) - int(dic2[k]) for k in dic1 if k in dic2 } 

或者Python的< 2.7:

dict((k,int(dic1[k]) - int(dic2[k])) for k in dic1 if k in dic2) 
+0

讓我們來反過來。我剛剛編輯了你的答案。 – 2012-03-31 23:38:46