在字典和列表之间查找匹配的字符串,然后将匹配项替换为字符串

时间:2020-07-18 03:25:38

标签: python python-3.x dictionary

我有以下字典和清单。我的词典包含的值是列表。

d={'Ro06_244736': ['A/A/A/A', 'R37', 'C/C/C/C'], 'Ro06_244742': ['G/G/G/G', '35', 'A/A/A/A']}

l=['R37', '35']

我试图在列表和字典列表的值之间找到匹配的值,如果它们匹配,请将字典列表的值替换为“ N / A”。匹配可以在任何元素上。我想要以下输出。

d2={'Ro06_244736': ['A/A/A/A', 'N/A', 'C/C/C/C'], 'Ro06_244742': ['G/G/G/G', 'N/A', 'A/A/A/A']}

我尝试了以下方法,但是没有用:

for a,b in d.items():
    #print(a,b)
    for n, i in enumerate(b):
        #print(n,i)
        for j in l:
            #print(j)
            if i == j:
                print(i,j)
                b[n] = "N/A"
print(b)

做到这一点的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

我相信是因为您实际上不是在编辑原始列表,而是在编辑d.items()产生的副本。

在编辑完字典后,尝试将其分配回字典中。

for a,b in d.items():
  ...
     b[n] = "N/A"
  ...
  d[a] = b

答案 1 :(得分:2)

以下代码将替换列表中的任意位置

In [9]: d={'Ro06_244736': ['A/A/A/A', 'R37', 'C/C/C/C'], 'Ro06_244742': ['G/G/G/G', '35', 'A/A/A/A']}
   ...:
   ...: l=['R37', '35']
   ...:

In [10]: for k,v in d.items():
    ...:     for index in range(len(v)):
    ...:         if v[index] in l: d[k][index] = "N/A"
    ...:

In [11]: d
Out[11]:
{'Ro06_244736': ['A/A/A/A', 'N/A', 'C/C/C/C'],
 'Ro06_244742': ['G/G/G/G', 'N/A', 'A/A/A/A']}

答案 2 :(得分:2)

我想做一个简单的列表理解,使用set(会更快,原来的列表也可以)将元素保存在列表中: 假设:

d = {'Ro06_244736': ['A/A/A/A', 'R37', 'C/C/C/C'], 'Ro06_244742': ['G/G/G/G', '35', 'A/A/A/A']}
l = {'R37', '35'}

一行:

d2 = {key: [item if item not in l else 'N/A' for item in values] for key, values in d.items()}

结果:

{'Ro06_244736': ['A/A/A/A', 'N/A', 'C/C/C/C'], 'Ro06_244742': ['G/G/G/G', 'N/A', 'A/A/A/A']}

答案 3 :(得分:1)

d={'Ro06_244736': ['A/A/A/A', 'R37', 'C/C/C/C'], 'Ro06_244742': ['G/G/G/G', '35', 'A/A/A/A']}

l=['R37', '35']

   for x,y in d.items():
    for i in y:
        if(i in l):
           y[(y.index(i))]="N/A"
print(d)