2012-03-31 2 views
1

이것은 매우 순진한 질문 일 수 있습니다. 그것은 나에게 dictionary1의 첫 번째 값을 제공두 개의 사전을 빼기 값

distance = dictionary1[position] - dictionary2[position] 

그러나 그것은 작동하지 않습니다 나는하여 두 사전의 값을 비교하려합니다.

나는 또한 시도했다 :

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

귀하의 질문은 나에게 매우 명확하지 않다. 입력 및 출력 예제를 제공하십시오. –

+0

'print dictionary1'과'print dictionary2'의 출력을 게시 할 수 있습니까? – Blender

+0

사전의 값에 빼기가 정의되어있는 경우이 값이 작동해야합니다. 그러나 그것은 작동하지 않으므로 사전에 어떤 종류의 가치가 있는지 알 필요가 있습니다. – aaronasterling

답변

0

내가 모두 사전에없는 키의 문제를 해결하기 위해 해결 방법을 사용했다. 당신은 당신의 편의에 따라 이것을 돌봐야합니다. 키가 없으면 값을 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  

수율 : 당신은 또한 dictionary comprehensions를 사용 coud 니클라스 B.으로

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

편집 그의 의견에 나타냅니다. 그러나 그들은 비단뱀에서 사용할 수 없습니다 < 2.7.

+1

이 코드는 set (d1)의 k에 대해 dic = {k : int (d1.get (k, 0)) - int (d2.get (k, 0))와 같습니다. 세트 (d2)}'. 건배 :) –

+0

@ NiklasB. '집합에 대해 (d1) | 세트 (d2)'나는 그것을 좋아한다! – joaquin

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 } 

또는 파이썬 < 2.7

:

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

다른 방법으로 해보 죠. 방금 당신의 대답을 편집했습니다. –

관련 문제