python词典和词典列表之间的映射

时间:2015-12-10 11:58:07

标签: python dictionary

my_dict =  {1: {'f1': 'name', 'f2': 'age', 'f3': 'class'}, 2: {'f1': 'company', 'f2': 'salary', 'f3': 'age', 'f4': 'class'}, 3: {'f1': 'Feature', 'f2': 'sum', 'f3': 'diff', 'f4': 'multiply', 'f5': 'div', 'f6': 'and', 'f7': 'or', 'f8': 'not', 'f9': 'dummy'}}

my_list =  [{3: {'sum': 'NONE', 'diff': 'yes', 'multiply': 'NONE', 'div': 'NONE', 'FEATURE': 'Maths', 'AND': 'NONE', 'OR': 'NONE', 'NOT': 'NONE', 'dummy': 'NONE'}}, {2: {'COMPANY': 'NONE', 'SALARY': 'Pass', 'AGE': 'NONE', 'CLASS': 'unknown'}}, {1: {'NAME': 'Pass', 'AGE': 'NONE', 'CLASS': '3'}}]

需要以下列方式输出my_dict到my_list之间的映射

new_level_dict_list=[{3: {'f1': 'Maths', 'f2': 'none', 'f3': 'yes', 'f4': 'NONE', 'f5': 'NONE', 'f6': 'NONE', 'f7': 'NONE', 'f8': 'NONE', 'f9': 'NONE'}}, {2: {'f1': 'NONE', 'f2': 'Pass', 'f3': 'NONE', 'f4': 'unknown'}}, {1: {'f1': 'Pass', 'f2': 'NONE', 'f3': '3'}}]

代码:

def function(my_dict, my_list):       
    # What should go here to get the required output

我尝试使用以下代码来映射两个字典,但不使用列表和字典

def function(dict1,dict2)
        for key,value in dict1.iteritems():
           print key
           result[key] = dict2[value]
       print result

function(dict1, dict2)

2 个答案:

答案 0 :(得分:0)

这应该完成工作:

# first transform the list to a dict
my_dict2 = {}
[my_dict2.update(key) for key in my_list]

# now search the old dict replace the key in question with the one from the new dict
for key in my_dict:
    for key2 in my_dict[key]:
        searchKey = my_dict[key][key2]
        if searchKey.upper() in my_dict2[key].keys():
            my_dict[key][key2] = my_dict2[key][searchKey.upper()]
        else:
            my_dict[key][key2] = my_dict2[key][searchKey]
print my_dict

要知道你的dict中有小写和大写的键,你应该在之前进行规范化。

答案 1 :(得分:0)

为了更容易迭代,我首先将my_list转换为my_dict2,以便更容易一起迭代。我可以这样做,因为my_list中的每个词都只有一个键

my_dict2 = {d.keys()[0]: d.values()[0] for d in my_list}

下一步是迭代这些词典并使用dict创建组合元素,它将两个值中的项联合起来 -

new_level_dict_list = []
for key in set(my_dict.keys()).union(my_dict2):
    val1 = my_dict.get(key, {})
    val2 = my_dict2.get(key, {})
    val = dict(val1.items() + val2.items())
    new_level_dict_list.append({key : dict(val1.items() + val2.items())})