用另一个词典中的项目替换词典中列表中的项目

时间:2019-03-09 03:25:16

标签: python python-3.x dictionary

我有以下词典:

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

我尝试了多次尝试,但是我听不到。任何帮助将不胜感激。

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