在python中,使用一个dict中的值Keys来获取另一个dict



我有以下字典

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'}

我有另一个默认dict,名为new_dict,具有以下

{5: [6, 7, 9]}

最终,我尝试使用new_dict中的键和值从用户dict中提取值,并将其放置在看起来像的final_dict中

{sara: [joyce, nick, kevin]}

问题是它说dict是不可破解的,所以像这样的代码不起作用。如何使用一个dict中的键和值来获取另一个dict的值?

users[new_dict.keys()]

但当你这样做users[5]时,它会像我想要一样返回sara

首先,有一种更简单的方法来定义users:

users = dict(enumerate(names))

你想要的dict可以用定义

{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创建一个函数,该函数使用itemgetter的每个参数作为键来查找其参数,并将结果作为元组返回。

我用比其他答案更友好的方式写了这篇文章,这样你就能更好地理解它。

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()返回了一个<class 'dict_keys'>,你不能只推它就得到所有的值。

考虑到您希望在列表中得到结果,我认为您正在寻找这个。。

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']}]

最新更新