繁体   English   中英

在 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 中的键和值从用户 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM