[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