2016-02-04 62 views
0

我有三個獨立的字典找到值不在字典

d1 = {'1': 1, '2': 2, '3': 3, '4' :4} 
d2 = {'5': 5, '7': 7, '9': 9, '10' :10} 
d3 = {'12': 12, '23': 23, '30': 30, '14' :14} 

我想從一個文件,並測試採取行,如果三列有目前在這些字典值。如果三列中的值不在字典中,我想打印非匹配對應的文件行。以下是我迄今寫:

OutputFileName = "results.txt" 
OutputFile = open(OutputFileName, 'w') 
import csv 
with open('inputfile.txt') as f: 
    reader = csv.DictReader(f,delimiter="\t") 
    for row in reader: 
     assign1 = row['assign1'] 
     assign2 = row['assign2'] 
     assign3 = row['assign3'] 
     if assign1 in d1: 

這是我碰到一些困惑。我只想要不在d1中的任務。這是我想要做的一些僞類型代碼:

if assign1 not in d1: 
    if assign2 not in d2: 
     if assign3 not in d3: 
      OutputFile.write(''+assign1+'\t'+assign2+'\t'+assign3+'\n') 

有沒有一種簡單的方法可以用字典來做到這一點?我應該使用else聲明嗎?我遇到了在這種情況下執行else的問題

+2

所以,如果你想打印行,如果'assign's _none_是在其各自的字典?爲什麼不使用'if ...和...和...:'? –

+0

如果這是你的字典的準確表示,即'str(x):x'那麼你應該只使用一個列表並在必要時進行轉換 – SirParselot

+0

@SirParselot是的,我想我需要切換到列表。我正在嘗試這 – interstellar

回答

1

不是100%確定你在問什麼。據我瞭解這個問題,你想知道如何最好地添加一個else子句到這個複雜的三重if聲明。

最好的方法是不要有三個if語句,但只有一個,並使用and來組合條件。

if assign1 not in d1 and assign2 not in d2 and assign3 not in d3: 
    OutputFile.write(''+assign1+'\t'+assign2+'\t'+assign3+'\n') 
else: 
    # stuff to do when not in all three dicts 

你也可以轉換條件的位,如果你覺得這是更直觀:

if not (assign1 in d1 or assign2 in d2 or assign3 in d3): 

而且你也可以得到通過交換ifelse情況下襬脫not的。

+0

'我很愚蠢。在字典的情況下,我不知道我可以使用'not in'。謝謝:) – interstellar

+0

我應該切換到列表。但是,這解決了我的問題:) – interstellar