![](/img/trans.png)
[英]Find partial matches between a dataframe (list of strings) and dictionary keys (tuples)
[英]Find matching strings between dictionary and list and replace matches with string
我有以下字典和列表。 我的字典包含列表值。
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”。 匹配可以在任何元素。 我想要以下 output。
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)
做這個的最好方式是什么?
我相信這是因為您實際上並沒有在編輯原始列表,而是在編輯d.items()
生成的副本。
編輯后嘗試將副本分配回字典。
for a,b in d.items():
...
b[n] = "N/A"
...
d[a] = b
以下代碼替換列表中的任何位置
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']}
我想做一個簡單的列表理解,使用一個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']}
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.