在Python字典中将键映射到值

2024-04-25 12:57:30 发布

您现在位置: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'}

唯一的问题是当我将旧的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'}

我想跳过与空格分隔的值配对的非空格分隔的键,也跳过与空格分隔的键配对的非空格分隔的值(即,我想跳过'AB':'C'、'e':'GH',-上面示例中的其余都可以)。你知道吗

我该怎么办?你知道吗


Tags: keyinnewfor字典abvaluegh
3条回答

试试这个:

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)

经过测试,效果很好:

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)

我在手机上做这个,所以我现在不能真正测试它,但这个应该可以:

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

相关问题 更多 >