我有以下词典:
d1 = {"00f_5" :[1,2,3], "00f_6": [1,2,3]}
d2 = [{"marker":"00f_5",1: 'AAA'},{"marker":"00f_6", 1: 'CCC'},{"marker":"00f_5", 2:"AAC"}]
我想要以下输出:
d1 = {"00f_5" :["AAA","AAC",3], "00f_6": ["CCC",2,3]}
我尝试了多次尝试,但是我听不到。任何帮助将不胜感激。
答案 0 :(得分:3)
您可以构建一个将标记映射到子字典的字典,该子字典将数字键映射到3个字母的代码,因此,给定标记和数字键,您可以使用dict.get
方法来获取映射的代码(如果存在)
d = {}
for s in d2:
d.setdefault(s['marker'], {}).update(s)
d1 = {k: [d[k].get(i, i) for i in l] for k, l in d1.items()}
所以给定:
d1 = {"00f_5" :[1,2,3], "00f_6": [1,2,3]}
d2 = [{"marker":"00f_5",1: 'AAA'},{"marker":"00f_6", 1: 'CCC'},{"marker":"00f_5", 2:"AAC"}]
d1
将变为:
{'00f_5': ['AAA', 'AAC', 3], '00f_6': ['CCC', 2, 3]}
答案 1 :(得分:0)
尽管我不会给您完整的程序,但是您可以尝试理解并使用以下代码:
d2 = [{"marker":"00f_5",1: 'AAA'},{"marker":"00f_6", 1: 'CCC'},{"marker":"00f_5", 2:"AAC"}]
for d in d2:
for key, value in d.items():
if key == "marker":
marker = value
else:
reference = value
content = key
print("Marker: {}, Reference: {}, Content: {}".format(marker, reference, content))
答案 2 :(得分:0)
我不建议覆盖第一个字典。只需新建一个(d3
)。
给出
d1 = {"00f_5" :[1,2,3], "00f_6": [1,2,3]}
lst = [
{"marker":"00f_5",1: 'AAA'},
{"marker":"00f_6", 1: 'CCC'},
{"marker":"00f_5", 2:"AAC"}
]
代码
d3 = {}
for d in lst:
key = d["marker"]
value = d1[key]
for k, v in d.items():
if not isinstance(k, int): # skip to numeric keys
continue
if key not in d3: # fill missing entries
d3[key] = value
idx = k - 1
d3[key][idx] = v # overwrite list item
d3
{'00f_5': ['AAA', 'AAC', 3], '00f_6': ['CCC', 2, 3]}