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)
答案 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())})