我有以下内容:
d1={"00f_125":["A","2","3"],
"00f_126":["1","2","3"],
"00f_127":["T","2","3"],
"00f_128":["T","2","3"]}
d2=[{"marker":"00f_125","1":"T"},
{"marker":"00f_126", "1":"G"},
{"marker":"00f_127","1":"T"}]
当只有整数时,我想替换。这是我想要的输出:
d3={"00f_125":["A","2","3"],
"00f_126":["G","2","3"],
"00f_127":["T","2","3"],
"00f_128":["T","2","3"]}
这可能吗?任何帮助将不胜感激。
答案 0 :(得分:1)
在d1
上就地执行非常简单:
for elem in d2:
marker = elem["marker"]
if "1" in d1[marker]: # is that specific int in d1?
i = d1[marker].index("1") # if so, then find its index
d1[marker][i] = elem["1"] # and replace it with your desired value
当然,这是一个过分的简化。如果除“标记”外还有多个键,您可能希望将所有这些键放入该字典中的列表中(例如
d2=[{"marker": "00f_125", "modifications": ["1": "G", "2": ...]}, ...]
),这样可以更轻松地遍历它们,而无需像我上面那样对值进行硬编码。
如果您想生成单独的字典d3
而又不修改原始字典,则可以在复制d1
之前先制作浅或深的副本。
答案 1 :(得分:1)
这是使用简单迭代的一种方法
例如:
d1={"00f_125":["A","2","3"],"00f_126":["1","2","3"],"00f_127":["T","2","3"],"00f_128":["T","2","3"]}
d2=[{"marker":"00f_125","1":"T"},{"marker":"00f_126", "1":"G"},{"marker":"00f_127","1":"T"}]
for i in d2:
if i["marker"] in d1:
if d1[i["marker"]][0] in i:
d1[i["marker"]][0] = i[d1[i["marker"]][0]]
输出:
{'00f_125': ['A', '2', '3'],
'00f_126': ['G', '2', '3'],
'00f_127': ['T', '2', '3'],
'00f_128': ['T', '2', '3']}
答案 2 :(得分:0)
d3 = d1.copy()
for i in d2:
key = i['marker']
if key in d3.keys():
if (d3[key][0].isdigit()):
d3[key][0] = i['1']
print(d3)
您可以将d1复制到d3,然后直接在d3中进行更改。对于d2中的每个列表,如果d3中存在标记值,则检查第一个元素是否为整数。如果是这样,则用字符值替换该数字。
这是上面代码的输出。
d3 = {'00f_126': ['G', '2', '3'],
'00f_125': ['A', '2', '3'],
'00f_127': ['T', '2', '3'],
'00f_128': ['T', '2', '3']}
答案 3 :(得分:0)
这是另一种不指定密钥的通用方法
for i in d2:
for key in i.keys():
if i.get(key) in d1:
lis_val = d1.get(i.get(key))
if key in lis_val:
lis_val[lis_val.index(key)] = i.get(key)
输出:
{
'00f_125': ['A','2','3'],
'00f_126': ['G','2','3'],
'00f_127': ['T','2','3'],
'00f_128': ['T','2','3']
}