查找字典和列表之间的匹配字符串,并用字符串替换匹配项

2024-10-08 20:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的字典和清单。我的字典包含列表中的值

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)

最好的方法是什么


Tags: 方法in元素列表forif字典items
3条回答

我想做一个简单的列表理解,使用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']}

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

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

我相信这是因为你实际上并没有编辑原始列表,而是编辑了d.items()产生的副本

编辑后,请尝试将副本重新分配到词典中

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

相关问题 更多 >

    热门问题