[Tutor] How to show dictionary item non present on file

Steven D'Aprano steve at pearwood.info
Tue Jul 22 13:32:47 CEST 2014


On Tue, Jul 22, 2014 at 01:10:18PM +0200, jarod_v6 at libero.it wrote:

> But I havethis problem I have a file and I want to know which elements are not 
> present on my file from dictionary.
>  more data.tmp 
> jack	1
> pippo	1
> luis	1
> frate	1
> livio	1
> frank	1
> 
> 
> with open("data.tmp") as p:
>     for i in p:
>         lines= i.strip("\n").split("\t")
>         if not diz.has_key(lines[0]):
>    ....:             print i
>    ....:             
> pippo	1
> luis	1
> frate	1
> livio	1
> 
> The output I want is to have :
> ralph and 'elenour.. how can I do this?

You are doing the comparison the wrong way: you are saying:

for each line in the file:
    is the line in the dict?
    if no, print the line


What you want is:

for each key in the dict:
    is the key in the file?
    if no, print the key


It is not easy to try searching the file directly, so we copy the lines 
from the file into a set:

lines = set()
with open("data.tmp") as the_file:
    for line in the_file:
        line = line.strip().split("\t")[0]
        lines.add(line)


Here is a shorter way to do the same thing:

with open("data.tmp") as the_file:
    lines = set([line.strip().split("\t")[0] for line in the_file])


Now you can walk through the dict:

for name in diz:
    if name not in lines:
        print(name) 


Or, if you prefer:

names = set(diz)  # copy the keys from the dict into a set
print(names.difference(lines))


If you want to see the other way around:

print(lines.difference(names))




-- 
Steven


More information about the Tutor mailing list