python:检查一个键中一定数量的字符是否与同一字典中另一个键的字符匹配

标签 python dictionary indexing

我有以下字典:

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”将与初始字典中的所有其他键进行比较
  • 因为它的前 18 个字符与字典中其他 2 个键的情况相同 ('M.ESE18.COFMSDM01V.MN.ML','M.ESE18.COFMSDM01V.CI.CR'),然后
  • M.ESE18.COFMSDM01V(3个键的公共(public)部分)将成为新字典中的新“顶级”键,匹配的2个键现在变成它的值嵌套字典

因此

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

提及:

  • 在多种情况下,多个初始键将 具有共同的字符,因此需要包含在 新的顶级 key ,但我不知道是哪个或有多少个
  • 字典中的某些键将是完全唯一的(就其前 18 个字符而言),但即使对于新字典中的键,我仍然需要创建相同的结构

我在编程方面非常陌生,所以我尝试以多种方式解决这个问题,但我真的找不到解决方案。我相信我无法将问题正确地分解为单独的部分(以逐个字符可索引的方式查找匹配的键——无法弄清楚如何在字典中做到这一点,所以我需要移动键到一个列表,但后来我陷入了如何正确进行比较的困境,然后将我需要的部分移动到一个新的字典,同时还将其复制为嵌套字典,它是旧的匹配值,等等)

如有任何帮助,我们将不胜感激!

最佳答案

一种轻松实现此目的的方法:

dic_new = {}
for key, value in dic_raw.iteritems():
    dic_new.setdefault(key[:18], {}).setdefault(key, value)

关于python:检查一个键中一定数量的字符是否与同一字典中另一个键的字符匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862780/

相关文章:

python - django 有超过 1 个外键错误

python - bool 索引与 np.where

c# - C# 的 Dictionary<key, value> 的 Java 类版本

python - 删除 python 列表字典中的最后一个元素

python - 如何使用python将数组存储在字典中

python - 在 Python 中使用名称中带有字符串和迭代索引的 savefig

apache - 如何重用已经使用 Apache Lucene 创建的索引?

python - 生成字符串中所有可能的字符组合

python - Sklearn - 发现输入变量的样本数量不一致 : [16512, 4128]

java - 提交到 SQS 时有关将消息自动编码为 base64 的规则