输入字典和字典列表,仅当存在整数时才替换

时间:2019-03-15 06:27:19

标签: python python-3.x dictionary

我有以下内容:

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

这可能吗?任何帮助将不胜感激。

4 个答案:

答案 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']
}