【问题标题】:Mapping keys to values in Python dictionary将键映射到 Python 字典中的值
【发布时间】:2016-12-16 00:51:38
【问题描述】:

致力于让字典键和值正确排列。

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

我想跳过非空格分隔的键与空格分隔的值配对,也跳过非空格分隔的值与空格分隔的键配对(即,我想跳过' AB': 'C', 'E': 'GH', - 上面例子中的其余部分都可以)。

我该怎么办?

【问题讨论】:

    标签: python dictionary key key-value


    【解决方案1】:

    试试这个:

    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)
    

    【讨论】:

    • 效果很好!谢谢!!
    【解决方案2】:

    我正在手机上执行此操作,所以我现在无法真正测试它,但应该这样做:

    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
    

    【讨论】:

      【解决方案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:
          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)
      

      【讨论】:

        【解决方案4】:

        你可以使用字典理解:

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

        【讨论】:

          【解决方案5】:
          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)
          

          【讨论】:

          • 这是 {'IJ': 'KL', 'M': 'O', 'N': 'P', 'Q': 'S', 'R': 'T' , 'U': 'W', 'V': 'X'} 你需要吗??
          猜你喜欢
          • 2017-07-07
          • 2020-09-06
          • 1970-01-01
          • 2016-05-31
          • 2013-01-08
          • 2021-08-02
          • 1970-01-01
          • 2018-12-31
          • 2019-05-21
          相关资源
          最近更新 更多