我有以下字典和清单。我的词典包含的值是列表。
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)
做到这一点的最佳方法是什么?
答案 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)