【问题标题】:Convert python dict "key value" into dict having "k(value) ey"将python dict“key value”转换为具有“k(value) ey”的dict
【发布时间】:2018-05-01 01:45:07
【问题描述】:

我有一个字典

d = {'A1BB11': 10,  
     'B1CC55': 20,  
     'A1A11':  30,  
     'A1A21':  40,  
     'B1HH21': 50,  
     'C1KK88': 60
    }

我想从 prev dict d 得到一个新的 dict

new_d = {'A1(80)':['BB11', 'A11', 'A21'],  
         'B1(70)':['CC55', 'HH21'],  
         'C1(60)':['KK88']  
        }

你能提供一个简单的pythonic方法吗?我是 python 世界的新手。

【问题讨论】:

  • 总是按前两个字母分组吗?

标签: python python-3.x dictionary key


【解决方案1】:

我认为最简单的方法是创建两个字典来跟踪您关注的两个值:总和和后缀列表。

from collections import defaultdict

d1, d2 = defaultdict(int), defaultdict(list)

d = {'A1BB11': 10,  
     'B1CC55': 20,  
     'A1A11':  30,  
     'A1A21':  40,  
     'B1HH21': 50,  
     'C1KK88': 60
    }

for k, v in d.items():
    prefix = k[:2]
    d1[prefix] += v
    d2[prefix].append(k[2:])

final = {'{}({})'.format(k, d1[k]): v for k, v in d2.items()}

print(final)
# {'A1(80)': ['BB11', 'A11', 'A21'],
#  'B1(70)': ['CC55', 'HH21'],
#  'C1(60)': ['KK88']}

【讨论】:

  • 当我尝试将 final 上传到列中时,例如 df.loc[df['ColA'].str.contains('value', na=False) , 'ColB'] = final 我收到以下错误 ValueError: setting an array element with a sequence。你能帮我处理这个错误吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2015-03-22
  • 2012-02-06
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多