2016-02-04 64 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