繁体   English   中英

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

[英]get values from dict whose key values match another dict

我有两个决定,他们的价值观本身就是双关语。 我想创建另一个dict,其值是dict2中与dict1具有相同'asin'键值的值。 我有下面的示例输出。 我没有使用过那么多的提示,所以任何提示都非常感激。

码:

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

码:

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

期望的输出:

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

你可以使用一些理解:一组理解从d1值中提取所有键,一个字典理解来过滤d2项目。

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

在Python 3.x中,用values / items替换itervalues / iteritems

在使用list comprehension过滤dict2之前,您可以先使用itertools.chain合并dict1所有子列表。

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

这输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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