2016-12-16 4 views
0

Работа над получением ключей и значений словаря правильно выстраивается.Сопоставление ключей со значениями в словаре Python

import pprint 

old_dict = {'A B':['C D'],'E F':['G H'],'I J':['K L'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 
new_dict = {} 

for x in old_dict: 
    try: 
     for i in range(0,2): 
      key = x.split()[i] 
      value = old_dict[x][0].split()[i] 
      new_dict[key] = value 
    except: 
     pass 

pprint.pprint(new_dict) 

Приведенный выше код работает отлично и возвращает:

{'A': 'C', 
'B': 'D', 
'E': 'G', 
'F': 'H', 
'I': 'K', 
'J': 'L', 
'M': 'O', 
'N': 'P', 
'Q': 'S', 
'R': 'T', 
'U': 'W', 
'V': 'X'} 

Единственная проблема, когда я изменить old_dict быть следующее:

old_dict = {'AB':['C D'],'E F':['GH'],'IJ':['KL'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 

возвращает:

{'AB': 'C', 
'E': 'GH', 
'IJ': 'KL', 
'M': 'O', 
'N': 'P', 
'Q': 'S', 
'R': 'T', 
'U': 'W', 
'V': 'X'} 

Я бы хотел пропустить k eys, которые не ограничены пространством в паре с значениями, разделенными пробелами, а также пропускают значения, которые не ограничены пространством, в паре с ключами, разделенными пробелами (т. е. я хочу пропустить «AB»: «C», «E»: «GH», остальные в приведенном выше примере - все в порядке).

Что мне делать?

ответ

0

Попробуйте это:

import pprint 
old_dict = {'AB':['C D'],'E F':['GH'],'I J':['K L'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 
new_dict = {} 

for x in old_dict: 
    for i in range(0,2): 
     if ' ' in x: 
     key = x.split()[i] 
     else: 
     key = x.replace("", " ")[1:-1] 
     key = key.split()[i] 
     if ' ' in old_dict[x][0]: 
     value = old_dict[x][0].split()[i] 
     else: 
     value = old_dict[x][0].replace("", " ")[1:-1] 
     value = value.split()[i] 

     new_dict[key] = value 

pprint.pprint(new_dict) 
+0

Отлично работает! Благодаря!! – Raider61

0

Я делаю это на моем телефоне, так что я не могу проверить это прямо сейчас, но это должно сделать это:

d = {'A B':['C D'],'E F':['G H'],'I J':['K L'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 
answer = {} 

for k in d: 
    k = k.split() 
    if len(k) == 1: continue 
    v = d[k][0].split() 
    if len(v) == 1: continue 

    for a,b in zip(k,v): 
     answer[a] = b 
0

Испытано работает отлично:

import pprint 

old_dict = {'AB':['C D'],'E F':['GH'],'I J':['K L'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 
new_dict = {} 

for x in old_dict: 
    try: 
     for i in range(0,2): 
      key = x.split()[i] 
      if len(key) == 1: 
       if len(old_dict[x][0].split()[i]) == 1: 
        value = old_dict[x][0].split()[i] 
      new_dict[key] = value 
    except: 
     pass 

pprint.pprint(new_dict) 
0
import pprint 

old_dict = {'AB':['C D'],'E F':['GH'],'IJ':['KL'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 
new_dict = {} 

for x in old_dict: 
    try: 
     if(len(x)==len(old_dict[x][0])): 
      for i in range(0,2): 
       key = x.split()[i] 
       value = old_dict[x][0].split()[i] 
       new_dict[key] = value 
    except: 
     pass 


pprint.pprint(new_dict) 
+0

Это {'IJ': 'KL', 'M': 'O', 'N': 'P', 'Q': 'S', 'R': 'T', ' U ':' W ',' V ':' X '} u need ?? – SmartManoj

0

Вы можете использовать Dict понимание:

>>> old_dict = {'AB':['C D'],'E F':['GH'],'IJ':['KL'],'M N':['O P'],'Q R':['S T'], 'U V':['W X']} 
>>> {x: y for k, v in old_dict.items() if len(k) == len(v[0]) for x, y in zip(k.split(), v[0].split())} 
{'M': 'O', 'N': 'P', 'Q': 'S', 'IJ': 'KL', 'U': 'W', 'V': 'X', 'R': 'T'} 
Смежные вопросы