将键映射到Python字典中的值
问题描述:
正在努力获取字典键和值以正确排列。将键映射到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', - 上面例子中的其余部分都没问题)。
我该怎么办?
答
试试这个:
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)
答
我我的手机上这样做,所以我真的不能测试它的权利,但这个应该这样做:
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
答
测试正常工作:
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)
答
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'}你需要? – SmartManoj
答
你可以使用字典理解:
>>> 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'}
工程太棒了!谢谢!! – Raider61