首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从键值与另一个dict匹配的dict中获取值

从键值与另一个dict匹配的dict中获取值
EN

Stack Overflow用户
提问于 2018-06-28 06:48:36
回答 2查看 118关注 0票数 2

我有两个dicts,他们的价值观本身就是dicts。我想创建另一个字典,它的值是与dict1具有相同‘asin’键值的dict2的值。我有下面的示例输出。我没有用过那么多的字典,所以我非常感谢你的任何建议。

代码:

代码语言:javascript
复制
dict1

{0:[{u’asin’: u’a’, u’h’: u’b’},{u’asin’: u’b’, u’h’: u’c’}], 1:[{u’asin’: u’c’, u’h’: u’b’},{u’asin’: u’d’, u’h’: u’c’}, 2:[{u’asin’: u’d’, u’h’: u’f’},{u’asin’: u’k’, u’h’: u’c’}]}

代码:

代码语言:javascript
复制
dict2

{0:{u’asin’: u’f’, u’img’: u’123’}, 1:{u’asin’: u’c’, u’img’: u’eed’}, 2:{u’asin’: u’d’, u’img’: u’ffg’}}

所需输出:

代码语言:javascript
复制
{1:{u’asin’: u’c’, u’img’: u’eed’}, 2:{u’asin’: u’d’, u’img’: u’ffg’}}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-28 06:57:43

您可以使用两种理解:一种是从d2的值中提取所有键的集合理解,另一种是在d2中过滤条目的字典理解。

代码语言:javascript
复制
keys = {subdict['asin'] for item in d1.itervalues() for subdict in item}

d3 = {k: v for k, v in d2.iteritems() if v['asin'] in keys}

print(d3)

{1: {'asin': 'c', 'img': 'eed'}, 2: {'asin': 'd', 'img': 'ffg'}}

在Python3.x中,将itervalues / iteritems替换为values / items

票数 2
EN

Stack Overflow用户

发布于 2018-06-28 06:55:46

您可以先使用itertools.chain合并dict1中的所有子列表,然后再使用列表理解过滤dict2

代码语言:javascript
复制
from itertools import chain
dict1 = {0:[{'asin': 'a', 'h': 'b'},{'asin': 'b', 'h': 'c'}], 1:[{'asin': 'c', 'h': 'b'},{'asin': 'd', 'h': 'c'}], 2:[{'asin': 'd', 'h': 'f'},{'asin': 'k', 'h': 'c'}]}
dict2 = {0:{'asin': 'f', 'img': '123'}, 1:{'asin': 'c', 'img': 'eed'}, 2:{'asin': 'd', 'img': 'ffg'}}
r = {d['asin'] for d in chain(*dict1.values())}
print({k: v for k, v in dict2.items() if v['asin'] in r})

这将输出以下内容:

代码语言:javascript
复制
{1: {'asin': 'c', 'img': 'eed'}, 2: {'asin': 'd', 'img': 'ffg'}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51072443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档