python – 从字典列表中创建一个非矛盾项的字典
发布时间:2020-12-20 12:19:56 所属栏目:Python 来源:网络整理
导读:这个问题的灵感来自 this question.我想从字典列表中获取一个字典,该字典应该包含所有字典中的所有键/值对,这些字典只包含一次,或者所有字典都对相关值达成一致.示例(摘自上述帖子): dicts = [dict(a=3,b=89,d=2),dict(a=3,c=99),b=42,c=33)]print dict_ite
这个问题的灵感来自
this question.我想从字典列表中获取一个字典,该字典应该包含所有字典中的所有键/值对,这些字典只包含一次,或者所有字典都对相关值达成一致.示例(摘自上述帖子):
dicts = [dict(a=3,b=89,d=2),dict(a=3,c=99),b=42,c=33)] print dict_itersection(dicts) 应该屈服 {'a': 3,'d': 2} 我目前的实现如下: import collections def dict_intersection(dicts): c=collections.defaultdict(set) for d in dicts: for a,b in d.iteritems(): c[a].add(b) return {a: next(iter(b)) for a,b in c.iteritems() if len(b) == 1} 所以我的问题是:这可以更优雅地完成吗? Sidequestion:可以在不修改基础字典(即不是b.pop())的情况下更好地完成(iter(b))吗? 解决方法
到目前为止,所有解决方案都假设所有字典值都是可清如果没有这个假设,代码不会变慢,只会变得更复杂,我会放弃它.这是一个适用于所有支持的值的版本!=:
def dict_intersection(dicts): result = {} conflicting = set() for d in dicts: for k,v in d.iteritems(): if k not in conflicting and result.setdefault(k,v) != v: del result[k] conflicting.add(k) return result 设置冲突只包含字典键,它始终是可清除的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |