簡體   English   中英

在字典和列表之間查找匹配的字符串並用字符串替換匹配項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM