除了迭代每个字典和匹配之外,还有什么方法可以实现这个目标吗? 主要是问这个问题,看看是否有一些有效的方法来做这个而不是循环。也许在itertools模块中有一些功能可以做到这一点,我不知道?有点像拉链? izip?
dict1:
{'command': ('aks',), 'variants': ('common',), 'name': 'oop', 'imports': ('abc', 'efg')}
dict2:
{'exports': <type 'dict'>, 'serialize': <type 'bool'>, 'force': <type 'bool'>, 'name': <type 'str'>, 'build_host': <type 'str'>, 'imports': <type 'list'>, 'logfile_timeout': <type 'int'>, 'update': 'skip_check', 'by_variant': <type 'list'>, 'command': <type 'list'>, 'signature': <type 'str'>, 'variants': 'skip_check'}
期望的结果: 在两个dict中列举或同义相同键的值
commands:
(('aks',), <type 'list'>)
variants:
(('common',), 'skip_check')
name:
('oop', <type 'str'>)
imports:
(('abc', 'efg'),<type 'list'>)
答案 0 :(得分:3)
我不完全确定你究竟在寻找什么,但这是我能做的最好的事情:
keys = d1.viewkeys() & d2
print zip(map(d1.get, keys), map(d2.get, keys))
<强>输出强>
[(('abc', 'efg'), <type 'list'>),
(('common',), 'skip_check'),
(('aks',), <type 'list'>),
('oop', <type 'str'>)]
注意:这假设d1
中的密钥都出现在d2
中。
答案 1 :(得分:2)
此解决方案适用于大多数Python版本,而dict.viewkeys
仅适用于Python 2.7(不是2.6,也不是3,您必须替换dict.keys
):
dict1 = {'command': ('aks',), 'variants': ('common',), 'name': 'oop', 'imports': ('abc', 'efg')}
dict2 = {'exports': dict, 'serialize': bool, 'force': bool, 'name': str, 'build_host': str, 'imports': list, 'logfile_timeout': int, 'update': 'skip_check', 'by_variant': list, 'command': list, 'signature': str, 'variants': 'skip_check'}
for key in set(dict1).intersection(dict2):
print(key + ':')
print(dict1[key], dict2[key])
打印:
imports:
(('abc', 'efg'), <type 'list'>)
variants:
(('common',), 'skip_check')
command:
(('aks',), <type 'list'>)
name:
('oop', <type 'str'>)
您可能想要的是将字符串中的键的交集分组:
intersect_dict= dict((key, [d[key] for d in (dict1, dict2)])
for key in set(dict1).intersection(dict2))
import pprint
pprint.pprint(intersect_dict)
打印:
{'command': [('aks',), <type 'list'>],
'imports': [('abc', 'efg'), <type 'list'>],
'name': ['oop', <type 'str'>],
'variants': [('common',), 'skip_check']}