Posts: 33
Threads: 13
Joined: May 2021
Hi,
Im trying to combine two different dicts into one dict, however the len of dict1 is greater then dict2 and I only need the keys that exist in both dicts.
those are my two dicts:
dict1: {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'
dict 2: {'AFG': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'ALG': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}, as you can see ALB not exist in dict2 and therefore shouldnt be in the new dict so the output I want to get is:
Output: comb_dict = {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Algeria': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17},
however, this is the output I get:
Output: comb_dict = {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Albania': {'Gold': 0, 'Silver': 0, 'Bronze': 0, 'Total': 0}, 'Algeria': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17},
thats my try to solve it:
def switch_to_full_name(dict1,dict2):
if isinstance(dict1, dict) and isinstance(dict2, dict):
for k in dict1:
if k in dict2:
comb_dict = dict(zip(dict1.values(), dict2.values()))
return comb_dict
else:
return "Input must be a dictionary" appreciate any help! thanks!
Posts: 371
Threads: 2
Joined: Jan 2021
Your dictionaries are defined incorrectly but other than that, the code seems to be functioning as expected.
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'}
dict2 = {'AFG': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2},
'ALG': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
def switch_to_full_name(dict1,dict2):
if isinstance(dict1, dict) and isinstance(dict2, dict):
for k in dict1:
if k in dict2:
comb_dict = dict(zip(dict1.values(), dict2.values()))
return comb_dict
else:
return "Input must be a dictionary"
print (switch_to_full_name (dict1, dict2))
Output: {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Albania': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
Posts: 33
Threads: 13
Joined: May 2021
(May-12-2021, 02:44 PM)BashBedlam Wrote: Your dictionaries are defined incorrectly but other than that, the code seems to be functioning as expected.
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'}
dict2 = {'AFG': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2},
'ALG': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
def switch_to_full_name(dict1,dict2):
if isinstance(dict1, dict) and isinstance(dict2, dict):
for k in dict1:
if k in dict2:
comb_dict = dict(zip(dict1.values(), dict2.values()))
return comb_dict
else:
return "Input must be a dictionary"
print (switch_to_full_name (dict1, dict2))
Output: {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Albania': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
Why are they defined incorrectly?
BTW the output you got is as well the wrong output.. instead of getting:
Output: {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Algeria': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
Im still getting:
Output: {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Albania': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
Albania shouldnt be there but Algeria
Posts: 6,332
Threads: 16
Joined: Feb 2020
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'}
dict2 = {'AFG': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2},
'ALG': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
def switch_to_full_name(names, medals):
new_dict = {}
for country in names:
if country in medals:
new_dict[names[country]] = medals[country]
return new_dict
print (switch_to_full_name (dict1, dict2))
Posts: 371
Threads: 2
Joined: Jan 2021
May-12-2021, 05:03 PM
(This post was last modified: May-12-2021, 05:04 PM by BashBedlam.)
(May-12-2021, 03:33 PM)ranbarr Wrote: Why are they defined incorrectly? Because...
(May-12-2021, 12:31 PM)ranbarr Wrote: dict1: {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria' Should be:
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'} You are correct about the output; An oversight on my part. Here is the corrected code.
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'}
dict2 = {'AFG': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2},
'ALG': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
def switch_to_full_name(dict1,dict2):
if isinstance(dict1, dict) and isinstance(dict2, dict):
comb_dict = {}
for k in dict1 :
if k in dict2:
comb_dict [dict1 [k]] = dict2 [k]
return comb_dict
else:
return "Input must be a dictionary"
print (switch_to_full_name (dict1, dict2)) Output: {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Algeria': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
Posts: 33
Threads: 13
Joined: May 2021
(May-12-2021, 05:03 PM)BashBedlam Wrote: (May-12-2021, 03:33 PM)ranbarr Wrote: Why are they defined incorrectly? Because...
(May-12-2021, 12:31 PM)ranbarr Wrote: dict1: {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria' Should be:
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'} You are correct about the output; An oversight on my part. Here is the corrected code.
dict1 = {'AFG': 'Afghanistan', 'ALB': 'Albania', 'ALG': 'Algeria'}
dict2 = {'AFG': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2},
'ALG': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
def switch_to_full_name(dict1,dict2):
if isinstance(dict1, dict) and isinstance(dict2, dict):
comb_dict = {}
for k in dict1 :
if k in dict2:
comb_dict [dict1 [k]] = dict2 [k]
return comb_dict
else:
return "Input must be a dictionary"
print (switch_to_full_name (dict1, dict2)) Output: {'Afghanistan': {'Gold': 0, 'Silver': 0, 'Bronze': 2, 'Total': 2}, 'Algeria': {'Gold': 5, 'Silver': 4, 'Bronze': 8, 'Total': 17}}
Thanks! it worked!
|