2014-12-01 4 views
1

두 개의 사전이 있습니다. DictB의 값으로 DictA의 키를 반복 할 수 있습니까? DictB의 값이 일치하면 DictB의 키를 반환합니다.

할 수 있습니까?
제게 조언이나 조언을주세요. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 고맙습니다.
예 :
파이썬을 사용하는 다른 사전의 키와 1 사전의 일치 값

A: {'WNT3A': '1732', 'RG59L': ' ', 'SCZD9': ' ', 'CD241': '6005', 'C2': '', 'RH': ' '} 

B: {'': [''], '6005': ['RH50A', ' CD241', ' SLC42A1'], '603': [''], '6000': [''], '8787': ['PERRS', ' RGS9L', ' MGC26458'], '41': ['ACCN2', ' BNaC2', ' hBNaC2'], '8490': [''], '9628': [''], '5999': ['SCZD9']} 

결과 :

new_A: {'WNT3A': '1732', 'RG59L': ' ', 'SCZD9': '5999 ', 'CD241': '6005', 'C2': '', 'RH': ' '}​ 

지금까지,이 코딩했지만 단지 나에게 또는 사전은 사전에 B를 포함하는 전체가 사전을 반환하는 것

new_a = {} 
for key in ref_dict: 
for value in (map(lambda x: x.strip(), ref_dict[key][0])): 
    if(not fill_dict.has_key(key)): 
     continue 
    elif(ref_dict[value] != fill_dict[key]): 
     new_a[value] = (ref_dict[key], fill_dict[key]) 
print new_a 

결과 :,453,210

{'WNT3A': '1732', 'RG59L': '', 'SCZD9': '', 'CD241': '6005', 'C2': '', 'RH': ''} 

내가 해봤 또 다른 코드는 다음과 같습니다

new_dict = {} 
for k, v in fill_dict.iteritems(): 
    vals = [] 
    if isinstance(v, list): 
     for i in v: 
      vals.append(ref_dict.get(i)) 
    else: 
    vals.append(ref_dict.get(v)) 
    if not vals: 
     continue 
    new_dict[k] = vals 
print new_dict 

결과 : 당신은 이것에 대한 next()와 DICT-이해를 사용할 수 있습니다

{'WNT3A': [None], 'RG59L': [['']], 'SCZD9': [['']], 'CD241': [['RH50A', ' CD241', ' SLC42A1']], 'C2': [['']], 'RH': [['']]} 
+0

사전 A의 값을 변경 하시겠습니까? 아니면 전혀 새로운 독창적 인 사전을 반환 하시겠습니까? – dursk

답변

0

:

>>> {k: next((k1 for k1, v1 in B.items() if k in v1), v) for k, v in A.items()} 
{'WNT3A': '1732', 'RG59L': ' ', 'SCZD9': '5999', 'CD241': '6005', 'C2': '', 'RH': ' '} 

next(<gen exp>, v)을 사용했습니다. 생성자 표현식에서 빈 반복자가 반환 된 경우 (즉, B 값 중 어느 것도 키가 k이 아닌 경우) A에서 v 값을 사용하고 그렇지 않으면 생성자 표현식에서 반환 된 키를 사용합니다.

위의 코드

도 같이 쓸 수있다 :

d = {} 
for k, v in A.items(): 
    for k1, v1 in B.items(): 
     if k in v1: 
      d[k] = k1 
      break 
    else: 
     #this will be executed if no value in `B` contains `k` 
     d[k] = v 
+0

예스,이 트릭을했다. 정말 고맙습니다. 괜찮 으면, 나에게 코드를 설명해 주시겠습니까? 코드가 어떻게 동작하는지 모르시겠습니까? – crypatix

+0

@crypatix. –

+0

고마워요 ^^ – crypatix

0

이 값으로 사전 a을 업데이트 할 것입니다 당신이 원하는 : 당신이 필요로하는 경우

for key_a in a: 
    for key_b, value_b in b.iteritems(): 
     for item in value_b: 
      if item == key_a: 
       a[key_a] = key_b 

완전히 새로운 dict이 다음 단지를 만들 a 사본을 다운로드하십시오.