472,982 Members | 2,680 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,982 software developers and data experts.

Delete common entries between two dictionaries

I have received such good help on this message board. I wonder if I might
not get a little more help from you on this.

I am at the point where I have two dictionaries, with information of a
domain and a frequency of that domain.

Now that I have the two, I want to delete each entry from one that the two
have in common, leaving only those that are unique to the dictionary?

Say I have a dictionary called domains_black
and another domains_white...

Thanks for the help.

Jul 18 '05 #1
11 2457
On Mon, 24 Nov 2003 13:24:17 -0800, Amy G wrote:
I have received such good help on this message board. I wonder if I
might not get a little more help from you on this.

I am at the point where I have two dictionaries, with information of
a domain and a frequency of that domain.

Now that I have the two, I want to delete each entry from one that
the two have in common, leaving only those that are unique to the
dictionary?
This would be great for sets, if a set adequately models your data.
(with two sets, this would simply be (s1-(s1&s2)))
Say I have a dictionary called domains_black and another
domains_white...


Did you want to define equality by key or by (key, value) pair?

for key in domains_white.keys() :
if key in domains_black: del domains_black[key]

for key in domains_white.keys() :
if key in domains_black and domains_white[key] == domains_black[key] :
del domains_black[key]

-D

--
He who scorns instruction will pay for it,
but he who respects a command is rewarded.
Proverbs 13:13

www: http://dman13.dyndns.org/~dman/ jabber: dm**@dman13.dyndns.org
Jul 18 '05 #2
"Amy G" <am*******@cox.net> writes:
Now that I have the two, I want to delete each entry from one that the two
have in common, leaving only those that are unique to the dictionary?

Say I have a dictionary called domains_black
and another domains_white...


for k in domains_white():
if k in domains_black:
del domains_black[k]
Jul 18 '05 #3
In article <97************@dman13.dyndns.org>,
Derrick 'dman' Hudson <dm**@dman13.dyndns.org> wrote:
This would be great for sets, if a set adequately models your data.
(with two sets, this would simply be (s1-(s1&s2)))


You mean s1 - s2, no need for that extra &.

--
David Eppstein http://www.ics.uci.edu/~eppstein/
Univ. of California, Irvine, School of Information & Computer Science
Jul 18 '05 #4
How do I do this same thing but with lists???

I apparently have two lists... not dictionaries.

This is what it prints if I add
print domains_black

[('YAHOO.COM', 118), ('buildingonline.com', 130), ('canada.com', 95),
('china.com', 104), ('earthlink.com', 118), ('earthlink.net', 122),
('email.com', 286), ('excite.com', 200), ('hongkong.com', 110), ('juno.com',
233), ('lycos.com', 95), ('mail.com', 399), ('minedu.fi', 134), ('msn.com',
764), ('shaw.ca', 259), ('stderr.windsongnews.com', 88), ('yahoo.ca', 435),
('yahoo.co.uk', 303), ('yahoo.com.hk', 156), ('yahoo.fr', 266)]

This is domains_white

[('aol.com', 17), ('awci.org', 6), ('cox.net', 12), ('hotmail.com', 6),
('yahoo.com', 11)]

I want to be left with domains_black =

[('YAHOO.COM', 118), ('buildingonline.com', 130), ('canada.com', 95),
('china.com', 104), ('earthlink.com', 118), ('earthlink.net', 122),
('email.com', 286), ('excite.com', 200), ('hongkong.com', 110), ('juno.com',
233), ('lycos.com', 95), ('mail.com', 399), ('minedu.fi', 134), ('msn.com',
764), ('shaw.ca', 259), ('stderr.windsongnews.com', 88), ('yahoo.ca', 435),
('yahoo.co.uk', 303), ('yahoo.com.hk', 156), ('yahoo.fr', 266)]

ie. minus the entries in domains_white.

Thanks again guys.

AMY
"Derrick 'dman' Hudson" <dm**@dman13.dyndns.org> wrote in message
news:97************@dman13.dyndns.org...
On Mon, 24 Nov 2003 13:24:17 -0800, Amy G wrote:
I have received such good help on this message board. I wonder if I
might not get a little more help from you on this.

I am at the point where I have two dictionaries, with information of
a domain and a frequency of that domain.

Now that I have the two, I want to delete each entry from one that
the two have in common, leaving only those that are unique to the
dictionary?


This would be great for sets, if a set adequately models your data.
(with two sets, this would simply be (s1-(s1&s2)))
Say I have a dictionary called domains_black and another
domains_white...


Did you want to define equality by key or by (key, value) pair?

for key in domains_white.keys() :
if key in domains_black: del domains_black[key]

for key in domains_white.keys() :
if key in domains_black and domains_white[key] == domains_black[key] :
del domains_black[key]

-D

--
He who scorns instruction will pay for it,
but he who respects a command is rewarded.
Proverbs 13:13

www: http://dman13.dyndns.org/~dman/ jabber:

dm**@dman13.dyndns.org
Jul 18 '05 #5
In article <WGvwb.7230$9O5.2236@fed1read06>,
"Amy G" <am*******@cox.net> wrote:
How do I do this same thing but with lists???

I apparently have two lists... not dictionaries.

This is what it prints if I add
print domains_black


domains_black = [x for x in domains_black if x not in domains_white]

If domains_white is a long list, this will be inefficient due to the
linear search to test whether each x belongs to it. In that case, you
might be better off using a set:

mask = Set(domains_white)
domains_black = [x for x in domains_black if x not in mask]

Also, this creates a new list. If you instead want to change the same
list in-place, you could replace "domains_black =" with
"domains_black[:] =".

--
David Eppstein http://www.ics.uci.edu/~eppstein/
Univ. of California, Irvine, School of Information & Computer Science
Jul 18 '05 #6
Don't know what I could have done wrong, but it just returned the origianl
list, unchanged.
"Amy G" <am*******@cox.net> wrote in message
news:WGvwb.7230$9O5.2236@fed1read06...
How do I do this same thing but with lists???

I apparently have two lists... not dictionaries.

This is what it prints if I add
print domains_black

[('YAHOO.COM', 118), ('buildingonline.com', 130), ('canada.com', 95),
('china.com', 104), ('earthlink.com', 118), ('earthlink.net', 122),
('email.com', 286), ('excite.com', 200), ('hongkong.com', 110), ('juno.com', 233), ('lycos.com', 95), ('mail.com', 399), ('minedu.fi', 134), ('msn.com', 764), ('shaw.ca', 259), ('stderr.windsongnews.com', 88), ('yahoo.ca', 435), ('yahoo.co.uk', 303), ('yahoo.com.hk', 156), ('yahoo.fr', 266)]

This is domains_white

[('aol.com', 17), ('awci.org', 6), ('cox.net', 12), ('hotmail.com', 6),
('yahoo.com', 11)]

I want to be left with domains_black =

[('YAHOO.COM', 118), ('buildingonline.com', 130), ('canada.com', 95),
('china.com', 104), ('earthlink.com', 118), ('earthlink.net', 122),
('email.com', 286), ('excite.com', 200), ('hongkong.com', 110), ('juno.com', 233), ('lycos.com', 95), ('mail.com', 399), ('minedu.fi', 134), ('msn.com', 764), ('shaw.ca', 259), ('stderr.windsongnews.com', 88), ('yahoo.ca', 435), ('yahoo.co.uk', 303), ('yahoo.com.hk', 156), ('yahoo.fr', 266)]

ie. minus the entries in domains_white.

Thanks again guys.

AMY
"Derrick 'dman' Hudson" <dm**@dman13.dyndns.org> wrote in message
news:97************@dman13.dyndns.org...
On Mon, 24 Nov 2003 13:24:17 -0800, Amy G wrote:
I have received such good help on this message board. I wonder if I
might not get a little more help from you on this.

I am at the point where I have two dictionaries, with information of
a domain and a frequency of that domain.

Now that I have the two, I want to delete each entry from one that
the two have in common, leaving only those that are unique to the
dictionary?


This would be great for sets, if a set adequately models your data.
(with two sets, this would simply be (s1-(s1&s2)))
Say I have a dictionary called domains_black and another
domains_white...


Did you want to define equality by key or by (key, value) pair?

for key in domains_white.keys() :
if key in domains_black: del domains_black[key]

for key in domains_white.keys() :
if key in domains_black and domains_white[key] == domains_black[key] : del domains_black[key]

-D

--
He who scorns instruction will pay for it,
but he who respects a command is rewarded.
Proverbs 13:13

www: http://dman13.dyndns.org/~dman/ jabber:

dm**@dman13.dyndns.org

Jul 18 '05 #7
In article <7x************@ruckus.brouhaha.com>,
Paul Rubin <http://ph****@NOSPAM.invalid> wrote:
"Amy G" <am*******@cox.net> writes:

Now that I have the two, I want to delete each entry from one that the two
have in common, leaving only those that are unique to the dictionary?

Say I have a dictionary called domains_black
and another domains_white...


for k in domains_white():
if k in domains_black:
del domains_black[k]


Didja try that before posting?.... (I see at least two errors.)
--
Aahz (aa**@pythoncraft.com) <*> http://www.pythoncraft.com/

Weinberg's Second Law: If builders built buildings the way programmers wrote
programs, then the first woodpecker that came along would destroy civilization.
Jul 18 '05 #8
aa**@pythoncraft.com (Aahz) writes:
for k in domains_white():
if k in domains_black:
del domains_black[k]


Didja try that before posting?.... (I see at least two errors.)


Oops, editing error (I removed 'keys' which is no longer needed, but
forgot to remove the parentheses). No I didn't try it first.
What's the second error?
Jul 18 '05 #9
* Amy G <am*******@cox.net> [2003-11-24 14:40]:
How do I do this same thing but with lists???

I apparently have two lists... not dictionaries.

This is what it prints if I add
print domains_black

[('YAHOO.COM', 118), ('buildingonline.com', 130), ('canada.com', 95),
('china.com', 104), ('earthlink.com', 118), ('earthlink.net', 122),
('email.com', 286), ('excite.com', 200), ('hongkong.com', 110), ('juno.com',
233), ('lycos.com', 95), ('mail.com', 399), ('minedu.fi', 134), ('msn.com',
764), ('shaw.ca', 259), ('stderr.windsongnews.com', 88), ('yahoo.ca', 435),
('yahoo.co.uk', 303), ('yahoo.com.hk', 156), ('yahoo.fr', 266)]

This is domains_white

[('aol.com', 17), ('awci.org', 6), ('cox.net', 12), ('hotmail.com', 6),
('yahoo.com', 11)]

I want to be left with domains_black =

[('YAHOO.COM', 118), ('buildingonline.com', 130), ('canada.com', 95),
('china.com', 104), ('earthlink.com', 118), ('earthlink.net', 122),
('email.com', 286), ('excite.com', 200), ('hongkong.com', 110), ('juno.com',
233), ('lycos.com', 95), ('mail.com', 399), ('minedu.fi', 134), ('msn.com',
764), ('shaw.ca', 259), ('stderr.windsongnews.com', 88), ('yahoo.ca', 435),
('yahoo.co.uk', 303), ('yahoo.com.hk', 156), ('yahoo.fr', 266)]

ie. minus the entries in domains_white.


Well, it's hard to tell exactly what you want, given that none of the
domains in the whitelist are in the original blacklist (and that you
didn't answer Derrick's question about whether you want to consider
entries equal if just the domain is the same, or do you require the
domain and the count to be the same).

(Also, I would recommend you normalize all of the domains to lowercase,
since case information is not significant to DNS.)

Anyway, I would solve the question you're asking with list
comprehensions:
black = [('yahoo.com',118), .... ('buildingonline.com',130),('foo.bar',100)] white = [('yahoo.com',11),('foo.bar',100)]
[x for x in black if x not in white] [('yahoo.com', 118), ('buildingonline.com', 130)] # note the version above only removes entries that have both .... # domain and count equal.
.... [x for x in black if x[0] not in [y[0] for y in white]] [('buildingonline.com', 130)] # I think the above is what you want. I think it'll be .... # more readable with an intermediate assignment:
.... w = [y[0] for y in white]
[x for x in black if x[0] not in w] [('buildingonline.com', 130)]


HTH-

John
--
<my first name>@<my domain (see (invalid) from address)>

Jul 18 '05 #10
In article <7x************@ruckus.brouhaha.com>,
Paul Rubin <http://ph****@NOSPAM.invalid> wrote:
aa**@pythoncraft.com (Aahz) writes:
Paul Rubin:

for k in domains_white():
if k in domains_black:
del domains_black[k]


Didja try that before posting?.... (I see at least two errors.)


Oops, editing error (I removed 'keys' which is no longer needed, but
forgot to remove the parentheses). No I didn't try it first.
What's the second error?


Try it and find out! ;-)
--
Aahz (aa**@pythoncraft.com) <*> http://www.pythoncraft.com/

Weinberg's Second Law: If builders built buildings the way programmers wrote
programs, then the first woodpecker that came along would destroy civilization.
Jul 18 '05 #11
On Mon, 24 Nov 2003 14:20:30 -0800, David Eppstein wrote:
In article <97************@dman13.dyndns.org>,
Derrick 'dman' Hudson <dm**@dman13.dyndns.org> wrote:
This would be great for sets, if a set adequately models your data.
(with two sets, this would simply be (s1-(s1&s2)))


You mean s1 - s2, no need for that extra &.


Ah, of course -- if an item is in s2 but not in s1, the subtraction is
a no-op.

--
Love is not affectionate feeling, but a steady wish for the loved
person's ultimate good as far as it can be obtained.
--C.S. Lewis

www: http://dman13.dyndns.org/~dman/ jabber: dm**@dman13.dyndns.org
Jul 18 '05 #12

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: Alistair | last post by:
IIS, Access 2000 I have a page that tabulates data from a DB, this data is items for sale, private ads. is there a way that at the same time it can automatically delete entries that are...
8
by: Brian L. Troutwine | last post by:
I've got a problem that I can't seem to get my head around and hoped somebody might help me out a bit: I've got a dictionary, A, that is arbitarily large and may contains ints, None and more...
48
by: Paul Melis | last post by:
Hello, I've always been using the has_key() method to test if a dictionary contains a certain key. Recently I tried the same using 'in', e.g. d = { ... } if k in d: ... and found that it...
29
by: Jon Slaughter | last post by:
Is it safe to remove elements from an array that foreach is working on? (normally this is not the case but not sure in php) If so is there an efficient way to handle it? (I could add the indexes to...
0
by: lllomh | last post by:
Define the method first this.state = { buttonBackgroundColor: 'green', isBlinking: false, // A new status is added to identify whether the button is blinking or not } autoStart=()=>{
2
by: DJRhino | last post by:
Was curious if anyone else was having this same issue or not.... I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...
0
tracyyun
by: tracyyun | last post by:
Hello everyone, I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
4
NeoPa
by: NeoPa | last post by:
Hello everyone. I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report). I know it can be done by selecting :...
3
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
1
by: Teri B | last post by:
Hi, I have created a sub-form Roles. In my course form the user selects the roles assigned to the course. 0ne-to-many. One course many roles. Then I created a report based on the Course form and...
3
by: nia12 | last post by:
Hi there, I am very new to Access so apologies if any of this is obvious/not clear. I am creating a data collection tool for health care employees to complete. It consists of a number of...
0
isladogs
by: isladogs | last post by:
The next online meeting of the Access Europe User Group will be on Wednesday 6 Dec 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, Mike...
4
by: GKJR | last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.