pandas Dataframe 按大小分组到嵌套字典(多层次结构)

jk9hmnmh  于 2022-12-16  发布在  其他
关注(0)|答案(3)|浏览(122)

我有这个代码:

df.groupby(by=["Unit","Product","Scheme","Type"]).size()

其中:

Unit           Product       Scheme        Type
JBBNB          BP            KRZPS         MRTZN               13
                                           TOPUP                5
                                           ZBPRE                3
               HB            KRJZS         CONST                6
                                           FZNEW                5
                                                               ..
htrcy          HB            TNJZS         PZTCN                2
                             TNBTS         TOEJZ                2
               TU            TNTPS         BDDFIN               2
                                           TOPUP                1
hwrng          BP            TGZPS         ZBPRE                1
Length: 1632, dtype: int64

我想把它转换成嵌套字典的dict(),如下所示

{
    "JBBNB": {"BP": {"KRZPS":{"MRTZN":13,"TOPUP":5,"ZBPRE":3}},
              "HB":{"KRJZS":{"CONST":6,"FZNEW":5}}
             },
    "htrcy": {"HB": {"TNJZS":{"PZTCN":2}, 
                    "TNBTS":{"TOEJZ":2}},
              "TU":{"TNTPS":{"BDDFIN":2,"TOPUP":1}},
             }
}

我怎样才能用最有效的方法做这件事
编辑:这里是我的数据

data = {"Unit": {"31-08": "JBJEB", "22-11": "JBGRB", "06-04": "JBGRB", "29-11": "JBZWI", "15-02": "JBGRB", "28-02": "JBJEB", "23-03": "JBGRB", "13-06": "JBJEB", "30-06": "JBMDR", "20-07": "JBJEB", "23-07": "JBJEB", "25-07": "JBJEB", "23-08": "JBJEB", "30-09": "JBZWR", "22-10": "JBJEB", "27-12": "JBJMD", "31-12": "JBJEB", "25-03": "JBJEB", "29-03": "JBJEB", "29-04": "JBJEB", "29-07": "JBJEB", "18-06": "JBJMD", "30-07": "JBMDR", "10-08": "JBJMR", "24-03": "JBJMD", "19-07": "JBJMD", "26-12": "JBJMD", "31-03": "JBJMR", "08-09": "JBJMR", "07-10": "JBJMR", "10-05": "JBJMR", "28-07": "JBJMR", "27-09": "JBJMR", "27-11": "JBJMR", "30-11": "JBJMR", "22-12": "JBJMR", "24-07": "JBZJB", "23-09": "JBZWI", "29-09": "JBZWI", "07-02": "JBZWI", "14-10": "JBZWR", "23-12": "JBZWR", "29-08": "JBZWR", "18-11": "JBZWR", "21-12": "JBZWR", "03-01": "JBZWR", "28-08": "JBZWR", "20-09": "JBMDR", "02-12": "JBMDR"}, "Product": {"31-08": "TU", "22-11": "TU", "06-04": "TU", "29-11": "TU", "15-02": "TU", "28-02": "TU", "23-03": "TU", "13-06": "TU", "30-06": "TU", "20-07": "TU", "23-07": "TU", "25-07": "TU", "23-08": "TU", "30-09": "TU", "22-10": "TU", "27-12": "TU", "31-12": "TU", "25-03": "TU", "29-03": "TU", "29-04": "TU", "29-07": "TU", "18-06": "TU", "30-07": "TU", "10-08": "TU", "24-03": "TU", "19-07": "TU", "26-12": "TU", "31-03": "TU", "08-09": "BP", "07-10": "TU", "10-05": "TU", "28-07": "TU", "27-09": "TU", "27-11": "TU", "30-11": "TU", "22-12": "TU", "24-07": "TU", "23-09": "TU", "29-09": "TU", "07-02": "TU", "14-10": "BP", "23-12": "BP", "29-08": "TU", "18-11": "TU", "21-12": "TU", "03-01": "TU", "28-08": "TU", "20-09": "TU", "02-12": "TU"}, "Scheme": {"31-08": "GJTPS", "22-11": "UPTPS", "06-04": "UPTPS", "29-11": "UKTPS", "15-02": "UPTPS", "28-02": "GJTPS", "23-03": "UPTPS", "13-06": "GJTPS", "30-06": "MJTPS", "20-07": "GJTPS", "23-07": "GJTPS", "25-07": "GJTPS", "23-08": "GJTPS", "30-09": "RJTPS", "22-10": "GJTPS", "27-12": "GJTPS", "31-12": "GJTPS", "25-03": "GJTPS", "29-03": "GJTPS", "29-04": "GJTPS", "29-07": "GJTPS", "18-06": "GJTPS", "30-07": "MJTPS", "10-08": "RJTPS", "24-03": "GJTPS", "19-07": "GJTPS", "26-12": "GJTPS", "31-03": "RJTPS", "08-09": "RJZPS", "07-10": "RJTPS", "10-05": "RJTPS", "28-07": "RJTPS", "27-09": "RJTPS", "27-11": "RJTPS", "30-11": "RJTPS", "22-12": "RJTPS", "24-07": "UPTPS", "23-09": "UKTPS", "29-09": "UKTPS", "07-02": "UKTPS", "14-10": "RJZPS", "23-12": "RJZPS", "29-08": "RJTPS", "18-11": "RJTPS", "21-12": "RJTPS", "03-01": "RJTPS", "28-08": "RJTPS", "20-09": "MJTPS", "02-12": "MJTPS"}, "Type": {"31-08": "BDDFIN", "22-11": "BDDFIN", "06-04": "BDDFIN", "29-11": "BDDFIN", "15-02": "BDDFIN", "28-02": "BDDFIN", "23-03": "BDDFIN", "13-06": "BDDFIN", "30-06": "BDDFIN", "20-07": "BDDFIN", "23-07": "BDDFIN", "25-07": "BDDFIN", "23-08": "BDDFIN", "30-09": "BDDFIN", "22-10": "BDDFIN", "27-12": "BDDFIN", "31-12": "BDDFIN", "25-03": "BDDFIN", "29-03": "BDDFIN", "29-04": "BDDFIN", "29-07": "BDDFIN", "18-06": "BDDFIN", "30-07": "BDDFIN", "10-08": "BDDFIN", "24-03": "BDDFIN", "19-07": "BDDFIN", "26-12": "BDDFIN", "31-03": "BDDFIN", "08-09": "BDDFIN", "07-10": "BDDFIN", "10-05": "BDDFIN", "28-07": "BDDFIN", "27-09": "BDDFIN", "27-11": "BDDFIN", "30-11": "BDDFIN", "22-12": "BDDFIN", "24-07": "BDDFIN", "23-09": "BDDFIN", "29-09": "BDDFIN", "07-02": "BDDFIN", "14-10": "BDDFIN", "23-12": "BDDFIN", "29-08": "BDDFIN", "18-11": "BDDFIN", "21-12": "BDDFIN", "03-01": "BDDFIN", "28-08": "BDDFIN", "20-09": "BDDFIN", "02-12": "BDDFIN"}}
df = pd.DataFrame(data)
yshpjwxd

yshpjwxd1#

让我们使用一些递归和groupby定义一个函数

def dictify(df, cols):
    if not cols:
        return len(df)

    return {k: dictify(g, cols[1:]) for k, g in df.groupby(cols[0])}

然后使用以下参数调用它

dictify(df, ["Unit","Product","Scheme","Type"])

这就是结果

{'JBGRB': {'TU': {'UPTPS': {'BDDFIN': 4}}},
 'JBJEB': {'TU': {'GJTPS': {'BDDFIN': 13}}},
 'JBJMD': {'TU': {'GJTPS': {'BDDFIN': 5}}},
 'JBJMR': {'BP': {'RJZPS': {'BDDFIN': 1}}, 'TU': {'RJTPS': {'BDDFIN': 9}}},
 'JBMDR': {'TU': {'MJTPS': {'BDDFIN': 4}}},
 'JBZJB': {'TU': {'UPTPS': {'BDDFIN': 1}}},
 'JBZWI': {'TU': {'UKTPS': {'BDDFIN': 4}}},
 'JBZWR': {'BP': {'RJZPS': {'BDDFIN': 2}}, 'TU': {'RJTPS': {'BDDFIN': 6}}}}
myzjeezk

myzjeezk2#

这里的主要思想是将group by table转换为元组列表,然后在其上循环。
代码:

ls = df.groupby(by=["Unit","Product","Scheme","Type"]).size().to_frame().to_records().tolist()

ls输出:

[('JBGRB', 'TU', 'UPTPS', 'BDDFIN', 4),
 ('JBJEB', 'TU', 'GJTPS', 'BDDFIN', 13),
 ('JBJMD', 'TU', 'GJTPS', 'BDDFIN', 5),
 ('JBJMR', 'BP', 'RJZPS', 'BDDFIN', 1),
 ('JBJMR', 'TU', 'RJTPS', 'BDDFIN', 9),
 ('JBMDR', 'TU', 'MJTPS', 'BDDFIN', 4),
 ('JBZJB', 'TU', 'UPTPS', 'BDDFIN', 1),
 ('JBZWI', 'TU', 'UKTPS', 'BDDFIN', 4),
 ('JBZWR', 'BP', 'RJZPS', 'BDDFIN', 2),
 ('JBZWR', 'TU', 'RJTPS', 'BDDFIN', 6)]

转换为法令:

dic = dict()
for k1, k2, k3, k4, val in ls:
    if k1 in dic: 
        if k2 in dic[k1]:
            if k3 in dic[k1][k2]:
                dic[k1][k2][k3].update({k4:val}) 
            else:
                dic[k1][k2].update({k3:{k4:val}}) 
        else:
            dic[k1].update({k2:{k3:{k4:val}}})
    else:
        dic.setdefault(k1, {}).update({k2:{k3:{k4:val}}})

dic

输出:

{'JBGRB': {'TU': {'UPTPS': {'BDDFIN': 4}}},
 'JBJEB': {'TU': {'GJTPS': {'BDDFIN': 13}}},
 'JBJMD': {'TU': {'GJTPS': {'BDDFIN': 5}}},
 'JBJMR': {'BP': {'RJZPS': {'BDDFIN': 1}}, 'TU': {'RJTPS': {'BDDFIN': 9}}},
 'JBMDR': {'TU': {'MJTPS': {'BDDFIN': 4}}},
 'JBZJB': {'TU': {'UPTPS': {'BDDFIN': 1}}},
 'JBZWI': {'TU': {'UKTPS': {'BDDFIN': 4}}},
 'JBZWR': {'BP': {'RJZPS': {'BDDFIN': 2}}, 'TU': {'RJTPS': {'BDDFIN': 6}}}}
6bc51xsx

6bc51xsx3#

前段时间遇到了这个问题,想出了这个解决方案,也许能帮到你,应该是万能的解决方案。
您可以通过向函数传递主键/子键**(groupby/subkeys)**来更改格式。
在我看来,这个小小的lambda函数:**嵌套字符串= lambda:defaultdict(nested_dict)**这是创建嵌套dict的最佳方法,因为您不必担心键错误。如果键不存在,它将被创建。

import operator
from collections import defaultdict
from copy import deepcopy
from functools import reduce
from pprint import pprint
from typing import Union
import pandas as pd

def ds_to_string(df: Union[pd.DataFrame, pd.Series]) -> Union[pd.Series, pd.DataFrame]:

    nastring = str(pd.NA)
    df2 = df.copy()
    if isinstance(df, pd.DataFrame):
        for col in df2.columns:
            if not df2[col].dtype == "string":
                try:
                    df2[col] = df2[col].fillna(nastring)
                except Exception:
                    pass
                df2[col] = df2[col].astype("string")
    else:
        try:
            df2 = df2.fillna(nastring)
        except Exception:
            pass
        df2 = df2.astype("string")
    df2 = df2.fillna(nastring).copy()
    return df2

def _to_nested_df(df: pd.DataFrame, groupby: str, subkeys: list) -> dict:

    nested_dict = lambda: defaultdict(nested_dict)

    def qq_ds_drop_duplicates(
        df, subset=None, keep="first", inplace=False, ignore_index=False
    ):
        df2 = ds_to_string(df)
        df22 = df2.drop_duplicates(
            subset=subset, keep=keep, inplace=inplace, ignore_index=ignore_index
        )

        return df.loc[df22.index].copy()

    def getFromDict(dataDict, mapList):
        # https://stackoverflow.com/a/14692747/15096247
        return reduce(operator.getitem, mapList, dataDict)

    nest = nested_dict()
    useasindex = groupby
    df2 = df.copy()
    use_as_index_var = "__useasindex___"
    subkeys_ = subkeys.copy()
    subkeys_ = [x for x in subkeys_ if x != useasindex]
    subkeys_.append(groupby)
    subkeys_.append(use_as_index_var)
    df2[use_as_index_var] = [useasindex] * len(df2)
    withoutduplicates = qq_ds_drop_duplicates(df2, subset=useasindex)
    alldictkeys = subkeys_.copy()
    asdi = (
        withoutduplicates.groupby(useasindex)[subkeys_]
        .apply(lambda x: x.set_index(use_as_index_var).to_dict(orient="index"))
        .to_dict()
    )
    kick_when_finished = list(asdi.keys())
    successkeys = []
    for key, item in asdi.items():
        for ini, serie in enumerate(alldictkeys):
            if serie == use_as_index_var:
                continue
            ini2 = 0
            for val, val2 in zip(df2[serie].to_list(), df2[useasindex].to_list()):
                tempindi = [val2, serie]
                getFromDict(nest, tempindi)[ini2] = val
                successkeys.append(tempindi.copy())
                ini2 += 1
    dictionary_without_ugly_lambda = deepcopy(nest)

    for keys in successkeys:
        allkeys = []
        for tempkey in keys:

            allkeys.append(tempkey)
            value_in_next_key = getFromDict(nest, allkeys)
            is_next_value_dict = isinstance(value_in_next_key, dict)
            if is_next_value_dict:
                getFromDict(dictionary_without_ugly_lambda, allkeys[:-1])[
                    allkeys[-1]
                ] = dict(
                    getFromDict(dictionary_without_ugly_lambda, allkeys[:-1])[
                        allkeys[-1]
                    ]
                )
    dictionary_without_ugly_lambda = dict(dictionary_without_ugly_lambda)
    for kickitem in kick_when_finished:
        del dictionary_without_ugly_lambda[kickitem][useasindex]

    return dictionary_without_ugly_lambda.copy()

# I had this problem a while ago and came up with this solution. Maybe it can help you.
#
data = {
    "Unit": {
        "31-08": "JBJEB",
        "22-11": "JBGRB",
        "06-04": "JBGRB",
        "29-11": "JBZWI",
        "15-02": "JBGRB",
        "28-02": "JBJEB",
        "23-03": "JBGRB",
        "13-06": "JBJEB",
        "30-06": "JBMDR",
        "20-07": "JBJEB",
        "23-07": "JBJEB",
        "25-07": "JBJEB",
        "23-08": "JBJEB",
        "30-09": "JBZWR",
        "22-10": "JBJEB",
        "27-12": "JBJMD",
        "31-12": "JBJEB",
        "25-03": "JBJEB",
        "29-03": "JBJEB",
        "29-04": "JBJEB",
        "29-07": "JBJEB",
        "18-06": "JBJMD",
        "30-07": "JBMDR",
        "10-08": "JBJMR",
        "24-03": "JBJMD",
        "19-07": "JBJMD",
        "26-12": "JBJMD",
        "31-03": "JBJMR",
        "08-09": "JBJMR",
        "07-10": "JBJMR",
        "10-05": "JBJMR",
        "28-07": "JBJMR",
        "27-09": "JBJMR",
        "27-11": "JBJMR",
        "30-11": "JBJMR",
        "22-12": "JBJMR",
        "24-07": "JBZJB",
        "23-09": "JBZWI",
        "29-09": "JBZWI",
        "07-02": "JBZWI",
        "14-10": "JBZWR",
        "23-12": "JBZWR",
        "29-08": "JBZWR",
        "18-11": "JBZWR",
        "21-12": "JBZWR",
        "03-01": "JBZWR",
        "28-08": "JBZWR",
        "20-09": "JBMDR",
        "02-12": "JBMDR",
    },
    "Product": {
        "31-08": "TU",
        "22-11": "TU",
        "06-04": "TU",
        "29-11": "TU",
        "15-02": "TU",
        "28-02": "TU",
        "23-03": "TU",
        "13-06": "TU",
        "30-06": "TU",
        "20-07": "TU",
        "23-07": "TU",
        "25-07": "TU",
        "23-08": "TU",
        "30-09": "TU",
        "22-10": "TU",
        "27-12": "TU",
        "31-12": "TU",
        "25-03": "TU",
        "29-03": "TU",
        "29-04": "TU",
        "29-07": "TU",
        "18-06": "TU",
        "30-07": "TU",
        "10-08": "TU",
        "24-03": "TU",
        "19-07": "TU",
        "26-12": "TU",
        "31-03": "TU",
        "08-09": "BP",
        "07-10": "TU",
        "10-05": "TU",
        "28-07": "TU",
        "27-09": "TU",
        "27-11": "TU",
        "30-11": "TU",
        "22-12": "TU",
        "24-07": "TU",
        "23-09": "TU",
        "29-09": "TU",
        "07-02": "TU",
        "14-10": "BP",
        "23-12": "BP",
        "29-08": "TU",
        "18-11": "TU",
        "21-12": "TU",
        "03-01": "TU",
        "28-08": "TU",
        "20-09": "TU",
        "02-12": "TU",
    },
    "Scheme": {
        "31-08": "GJTPS",
        "22-11": "UPTPS",
        "06-04": "UPTPS",
        "29-11": "UKTPS",
        "15-02": "UPTPS",
        "28-02": "GJTPS",
        "23-03": "UPTPS",
        "13-06": "GJTPS",
        "30-06": "MJTPS",
        "20-07": "GJTPS",
        "23-07": "GJTPS",
        "25-07": "GJTPS",
        "23-08": "GJTPS",
        "30-09": "RJTPS",
        "22-10": "GJTPS",
        "27-12": "GJTPS",
        "31-12": "GJTPS",
        "25-03": "GJTPS",
        "29-03": "GJTPS",
        "29-04": "GJTPS",
        "29-07": "GJTPS",
        "18-06": "GJTPS",
        "30-07": "MJTPS",
        "10-08": "RJTPS",
        "24-03": "GJTPS",
        "19-07": "GJTPS",
        "26-12": "GJTPS",
        "31-03": "RJTPS",
        "08-09": "RJZPS",
        "07-10": "RJTPS",
        "10-05": "RJTPS",
        "28-07": "RJTPS",
        "27-09": "RJTPS",
        "27-11": "RJTPS",
        "30-11": "RJTPS",
        "22-12": "RJTPS",
        "24-07": "UPTPS",
        "23-09": "UKTPS",
        "29-09": "UKTPS",
        "07-02": "UKTPS",
        "14-10": "RJZPS",
        "23-12": "RJZPS",
        "29-08": "RJTPS",
        "18-11": "RJTPS",
        "21-12": "RJTPS",
        "03-01": "RJTPS",
        "28-08": "RJTPS",
        "20-09": "MJTPS",
        "02-12": "MJTPS",
    },
    "Type": {
        "31-08": "BDDFIN",
        "22-11": "BDDFIN",
        "06-04": "BDDFIN",
        "29-11": "BDDFIN",
        "15-02": "BDDFIN",
        "28-02": "BDDFIN",
        "23-03": "BDDFIN",
        "13-06": "BDDFIN",
        "30-06": "BDDFIN",
        "20-07": "BDDFIN",
        "23-07": "BDDFIN",
        "25-07": "BDDFIN",
        "23-08": "BDDFIN",
        "30-09": "BDDFIN",
        "22-10": "BDDFIN",
        "27-12": "BDDFIN",
        "31-12": "BDDFIN",
        "25-03": "BDDFIN",
        "29-03": "BDDFIN",
        "29-04": "BDDFIN",
        "29-07": "BDDFIN",
        "18-06": "BDDFIN",
        "30-07": "BDDFIN",
        "10-08": "BDDFIN",
        "24-03": "BDDFIN",
        "19-07": "BDDFIN",
        "26-12": "BDDFIN",
        "31-03": "BDDFIN",
        "08-09": "BDDFIN",
        "07-10": "BDDFIN",
        "10-05": "BDDFIN",
        "28-07": "BDDFIN",
        "27-09": "BDDFIN",
        "27-11": "BDDFIN",
        "30-11": "BDDFIN",
        "22-12": "BDDFIN",
        "24-07": "BDDFIN",
        "23-09": "BDDFIN",
        "29-09": "BDDFIN",
        "07-02": "BDDFIN",
        "14-10": "BDDFIN",
        "23-12": "BDDFIN",
        "29-08": "BDDFIN",
        "18-11": "BDDFIN",
        "21-12": "BDDFIN",
        "03-01": "BDDFIN",
        "28-08": "BDDFIN",
        "20-09": "BDDFIN",
        "02-12": "BDDFIN",
    },
}
dfa = pd.DataFrame(data)
print(dfa)
df = _to_nested_df(dfa, groupby="Unit", subkeys=["Type", "Product", "Scheme"])
pprint(df)

{'JBGRB': {'Product': {1: 'TU', 2: 'TU', 4: 'TU', 6: 'TU'},
           'Scheme': {1: 'UPTPS', 2: 'UPTPS', 4: 'UPTPS', 6: 'UPTPS'},
           'Type': {1: 'BDDFIN', 2: 'BDDFIN', 4: 'BDDFIN', 6: 'BDDFIN'}},
 'JBJEB': {'Product': {0: 'TU',
                       5: 'TU',
                       7: 'TU',
                       9: 'TU',
                       10: 'TU',
                       11: 'TU',
                       12: 'TU',
                       14: 'TU',
                       16: 'TU',
                       17: 'TU',
                       18: 'TU',
                       19: 'TU',
                       20: 'TU'},
           'Scheme': {0: 'GJTPS',
                      5: 'GJTPS',
                      7: 'GJTPS',
                      9: 'GJTPS',
                      10: 'GJTPS',
                      11: 'GJTPS',
                      12: 'GJTPS',
                      14: 'GJTPS',
                      16: 'GJTPS',
                      17: 'GJTPS',
                      18: 'GJTPS',
                      19: 'GJTPS',
                      20: 'GJTPS'},
           'Type': {0: 'BDDFIN',
                    5: 'BDDFIN',
                    7: 'BDDFIN',
                    9: 'BDDFIN',
                    10: 'BDDFIN',
                    11: 'BDDFIN',
                    12: 'BDDFIN',
                    14: 'BDDFIN',
                    16: 'BDDFIN',
                    17: 'BDDFIN',
                    18: 'BDDFIN',
                    19: 'BDDFIN',
                    20: 'BDDFIN'}},
 'JBJMD': {'Product': {15: 'TU', 21: 'TU', 24: 'TU', 25: 'TU', 26: 'TU'},
           'Scheme': {15: 'GJTPS',
                      21: 'GJTPS',
                      24: 'GJTPS',
                      25: 'GJTPS',
                      26: 'GJTPS'},
           'Type': {15: 'BDDFIN',
                    21: 'BDDFIN',
                    24: 'BDDFIN',
                    25: 'BDDFIN',
                    26: 'BDDFIN'}},
 'JBJMR': {'Product': {23: 'TU',
                       27: 'TU',
                       28: 'BP',
                       29: 'TU',
                       30: 'TU',
                       31: 'TU',
                       32: 'TU',
                       33: 'TU',
                       34: 'TU',
                       35: 'TU'},
           'Scheme': {23: 'RJTPS',
                      27: 'RJTPS',
                      28: 'RJZPS',
                      29: 'RJTPS',
                      30: 'RJTPS',
                      31: 'RJTPS',
                      32: 'RJTPS',
                      33: 'RJTPS',
                      34: 'RJTPS',
                      35: 'RJTPS'},
           'Type': {23: 'BDDFIN',
                    27: 'BDDFIN',
                    28: 'BDDFIN',
                    29: 'BDDFIN',
                    30: 'BDDFIN',
                    31: 'BDDFIN',
                    32: 'BDDFIN',
                    33: 'BDDFIN',
                    34: 'BDDFIN',
                    35: 'BDDFIN'}},
 'JBMDR': {'Product': {8: 'TU', 22: 'TU', 47: 'TU', 48: 'TU'},
           'Scheme': {8: 'MJTPS', 22: 'MJTPS', 47: 'MJTPS', 48: 'MJTPS'},
           'Type': {8: 'BDDFIN', 22: 'BDDFIN', 47: 'BDDFIN', 48: 'BDDFIN'}},
 'JBZJB': {'Product': {36: 'TU'},
           'Scheme': {36: 'UPTPS'},
           'Type': {36: 'BDDFIN'}},
 'JBZWI': {'Product': {3: 'TU', 37: 'TU', 38: 'TU', 39: 'TU'},
           'Scheme': {3: 'UKTPS', 37: 'UKTPS', 38: 'UKTPS', 39: 'UKTPS'},
           'Type': {3: 'BDDFIN', 37: 'BDDFIN', 38: 'BDDFIN', 39: 'BDDFIN'}},
 'JBZWR': {'Product': {13: 'TU',
                       40: 'BP',
                       41: 'BP',
                       42: 'TU',
                       43: 'TU',
                       44: 'TU',
                       45: 'TU',
                       46: 'TU'},
           'Scheme': {13: 'RJTPS',
                      40: 'RJZPS',
                      41: 'RJZPS',
                      42: 'RJTPS',
                      43: 'RJTPS',
                      44: 'RJTPS',
                      45: 'RJTPS',
                      46: 'RJTPS'},
           'Type': {13: 'BDDFIN',
                    40: 'BDDFIN',
                    41: 'BDDFIN',
                    42: 'BDDFIN',
                    43: 'BDDFIN',
                    44: 'BDDFIN',
                    45: 'BDDFIN',
                    46: 'BDDFIN'}}}

相关问题