[英]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 中的键和值从用户 dict 中提取值,以将其放置在看起来像这样的 final_dict 中
{sara: [joyce, nick, kevin]}
问题是它说字典是不可散列的,所以这样的代码不起作用。 您如何使用一个字典中的键、值来获取另一个字典中的值?
users[new_dict.keys()]
但是当你这样做时users[5]
这会像我想要的那样返回 sara
首先,有一种更简单的方式来定义users
:
users = dict(enumerate(names))
您想要的字典可以定义为
{users[name]: [users[friend] for friend in friends] for name, friends in new_dict.items()}
首先,您遍历new_dict
中的键/值对。 键及其关联值都用作user
中的键。
使用operator.itemgetter
有一种更短的方法来编写它。
from operator import itemgetter
{users[k]: list(itemgetter(*v)(users)) for k, v in new_dict.items()}
itemgetter
创建了一个 function ,它使用每个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']}]
我以比答案的 rest 更友好的方式写了这篇文章,以便您更好地理解它。
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
output 是: {'sara': ['joyce', 'nick', 'kevin']}
它的作用是遍历new_dict
中的每个键,然后遍历其值并从中创建一个列表。 最后,它将该列表分配给该特定键的值。
您的答案是错误的,因为new_dict.keys()
返回一个<class 'dict_keys'>
并且您不能只是推它并获取所有值。
''' 您好,亲爱的,python 标识符总是告诉您任何集合、列表、字符串、可验证的名称都将以字母开头,而不是(.,_ 或数字),但最后或中间是我们可以使用数字的可验证名称。谢谢很多......继续......'''
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.