我有以下字典:
dic_raw={'M.ESE18.COFMSDM01V.MW.IT':{'initiativeType': 'Activation', 'initiativeName': 'Campaign1'},'M.ESE18.COFMSDM01V.MN.ML':{'initiativeType': 'Revokation', 'initiativeName': 'Campaign 2'},'M.ESE18.COFMSDM01V.CI.CR':{'initiativeType': 'Stratification', 'initiativeName': 'Campaign 3'},'M.ESE18.COFMSDM01A.OP.TA':{'initiativeType': 'Activation', 'initiativeName': 'Campaign 5'}, 'N.ESE18.FFFMSDM01A.NS.TA':{'initiativeType': 'Activation', 'initiativeName': 'Campaign 6'}, 'N.ESE18.FFFMSDM01A.OP.TA':{'initiativeType': 'Activation', 'initiativeName': 'Campaign 4'}}
我需要的是创建另一个词典( dic_new ),其信息与 dic_raw 相同+ +键的另一个深度级别。 dic_new 中的新关键字段来自初始 dic_raw 中任意键的前18个匹配字符,其值应为嵌套字典" old" 18个匹配键+所有"旧"值。
像这样:
dic_new={'M.ESE18.COFMSDM01V': {'M.ESE18.COFMSDM01V.MW.IT': {'initiativeType': 'Activation', 'initiativeName': 'Campaign 1'}, 'M.ESE18.COFMSDM01V.MN.ML': {'initiativeType': 'Revokation', 'initiativeName': 'Campaign 2'}, 'M.ESE18.COFMSDM01V.CI.CR': {'initiativeType': 'Stratification', 'initiativeName': 'Campaign 3'}}, 'N.ESE18.FFFMSDM01A':{'N.ESE18.FFFMSDM01A.NS.TA': {'initiativeType': 'Activation', 'initiativeName': 'Campaign 6'}, 'N.ESE18.FFFMSDM01A.OP.TA': {'initiativeType': 'Activation', 'initiativeName': 'Campaign 4'}}, 'M.ESE18.COFMSDM01A':{'M.ESE18.COFMSDM01A.OP.TA': {'initiativeType': 'Activation', 'initiativeName': 'Campaign 5'}}}
例如:
因此
M.ESE18.COFMSDM01V.MW.IT:{'initiativeType': 'Activation','initiativeName': 'Campaign 1'}
M.ESE18.COFMSDM01V.MN.ML:{'initiativeType': 'Revokation','initiativeName': 'Campaign 2'}
应该成为
M.ESE18.COFMSDM01V:{'M.ESE18.COFMSDM01V.MW.IT': {'initiativeType': 'Activation', 'initiativeName': 'Campaign 1'},'M.ESE18.COFMSDM01V.MN.ML': {'initiativeType': 'Revokation', 'initiativeName': 'Campaign 2'}}
提及:
我在编程方面非常陌生,所以我尝试过多种方式解决问题,但我真的找不到解决方案。我相信我无法将问题正确地分解成单独的部分(以逐个字符的可转换方式找到匹配的键 - 不知道如何在字典中这样做我所需要的将键移动到一个列表,但后来我不知道如何正确地进行比较,然后将我需要的部分移动到一个新的dict,同时还复制为嵌套的dicts它的旧匹配值等。)
欢迎任何帮助!
答案 0 :(得分:3)
轻松实现这一目标的方法:
dic_new = {}
for key, value in dic_raw.iteritems():
dic_new.setdefault(key[:18], {}).setdefault(key, value)
答案 1 :(得分:0)
试试这个:
dic_new={}
for k in dic_raw:
nk = k[:18]
if not nk in dic_new:
dic_new[nk]={}
dic_new[nk][k] = dic_raw[k]