在 python 中使用一个字典中的键、值来获取另一个字典中的值
Use Keys, values in one dict to get values in another dict in python
我有以下词典
names= 'bob julian tim martin rod sara joyce nick beverly kevin'.split()
ids = range(len(names))
users = dict(zip(ids, names))
所以结果是
{0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}
我有另一个名为 new_dict 的默认字典,其中包含以下内容
{5: [6, 7, 9]}
最终,我尝试使用 new_dict 中的键和值从用户字典中提取值,将其放置在如下所示的 final_dict 中
{sara: [joyce, nick, kevin]}
问题是它说 dict 是不可散列的,所以这样的代码不起作用。如何使用一个字典中的键和值来获取另一个字典中的值?
users[new_dict.keys()]
但是当你这样做时 users[5]
这将 return sara 像我想要的那样
首先,有一个更简单的方法来定义users
:
users = dict(enumerate(names))
你想要的字典可以定义为
{users[name]: [users[friend] for friend in friends] for name, friends in new_dict.items()}
首先,您迭代 new_dict
中的 key/values 对。键及其关联值都用作 user
.
中的键
使用operator.itemgetter
。
有一个稍微更短的写法
from operator import itemgetter
{users[k]: list(itemgetter(*v)(users)) for k, v in new_dict.items()}
itemgetter
创建一个函数,该函数使用 itemgetter
的每个参数作为键来查找其参数,并将结果作为元组返回。
我假设你正在寻找这个,考虑到你想要列表中的结果..
a = {0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}
b = {5: [6, 7, 9]}
res = [{a[k]: [a[k2] for k2 in b[k]]} for k in b]
结果:
[{'sara': ['joyce', 'nick', 'kevin']}]
我用比其他答案更友好的方式写了这个,所以你可以更好地理解它。
users = {0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}
new_dict = {5: [6, 7, 9]}
new_users = {}
for key in new_dict.keys():
temp_users = []
for value in new_dict[key]:
temp_users.append(users[value])
new_users[users[key]] = temp_users
这个输出是:{'sara': ['joyce', 'nick', 'kevin']}
它所做的是遍历 new_dict
中的每个键,后者又遍历它的值并从中创建一个列表。最后,它将该列表分配给该特定键的值。
您的回答是错误的,因为 new_dict.keys()
returns 一个 <class 'dict_keys'>
而您不能只是推它并获得所有值。
我有以下词典
names= 'bob julian tim martin rod sara joyce nick beverly kevin'.split()
ids = range(len(names))
users = dict(zip(ids, names))
所以结果是
{0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}
我有另一个名为 new_dict 的默认字典,其中包含以下内容
{5: [6, 7, 9]}
最终,我尝试使用 new_dict 中的键和值从用户字典中提取值,将其放置在如下所示的 final_dict 中
{sara: [joyce, nick, kevin]}
问题是它说 dict 是不可散列的,所以这样的代码不起作用。如何使用一个字典中的键和值来获取另一个字典中的值?
users[new_dict.keys()]
但是当你这样做时 users[5]
这将 return sara 像我想要的那样
首先,有一个更简单的方法来定义users
:
users = dict(enumerate(names))
你想要的字典可以定义为
{users[name]: [users[friend] for friend in friends] for name, friends in new_dict.items()}
首先,您迭代 new_dict
中的 key/values 对。键及其关联值都用作 user
.
使用operator.itemgetter
。
from operator import itemgetter
{users[k]: list(itemgetter(*v)(users)) for k, v in new_dict.items()}
itemgetter
创建一个函数,该函数使用 itemgetter
的每个参数作为键来查找其参数,并将结果作为元组返回。
我假设你正在寻找这个,考虑到你想要列表中的结果..
a = {0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}
b = {5: [6, 7, 9]}
res = [{a[k]: [a[k2] for k2 in b[k]]} for k in b]
结果:
[{'sara': ['joyce', 'nick', 'kevin']}]
我用比其他答案更友好的方式写了这个,所以你可以更好地理解它。
users = {0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}
new_dict = {5: [6, 7, 9]}
new_users = {}
for key in new_dict.keys():
temp_users = []
for value in new_dict[key]:
temp_users.append(users[value])
new_users[users[key]] = temp_users
这个输出是:{'sara': ['joyce', 'nick', 'kevin']}
它所做的是遍历 new_dict
中的每个键,后者又遍历它的值并从中创建一个列表。最后,它将该列表分配给该特定键的值。
您的回答是错误的,因为 new_dict.keys()
returns 一个 <class 'dict_keys'>
而您不能只是推它并获得所有值。