使用键,一个字典中的值来获取python中另一个字典中的值

时间:2019-10-26 13:41:24

标签: python dictionary defaultdict

我有以下字典

[appwidget_text].setMovementMethod(new ScrollingMovementMethod());

所以结果是

names= 'bob julian tim martin rod sara joyce nick beverly kevin'.split()
ids = range(len(names))
users = dict(zip(ids, names))

我还有另一个默认字典,称为new_dict,其内容如下:

{0: 'bob', 1: 'julian', 2: 'tim', 3: 'martin', 4: 'rod', 5: 'sara', 6: 'joyce', 7: 'nick', 8: 'beverly', 9: 'kevin'}

最终,我尝试使用new_dict中的键和值从用户dict中提取值,以将其放置在如下所示的final_dict中

{5: [6, 7, 9]}

问题在于,该字典是不可散列的,因此这样的代码不起作用。您如何使用一个字典中的键,值来获取另一个字典中的值?

{sara: [joyce, nick, kevin]}

但是当您执行此操作users[new_dict.keys()] 时,它将返回我想要的sara

3 个答案:

答案 0 :(得分:3)

首先,有一种更简单的方法来定义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创建一个函数,该函数使用itemgetter的每个参数作为键在其参数上执行查找,并以元组返回结果。

答案 1 :(得分:0)

考虑到您想要列表中的结果,我认为您正在寻找这个。

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

答案 2 :(得分:0)

我以比其余答案更友好的方式写了这篇文章,以便您可以更好地理解它。

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'>,您不能随便推它并获取所有值。