我在列表中有0个或更多的dicts:
>>> dicts = [dict(a=3, b=89, d=2), dict(a=3, b=89, c=99), dict(a=3, b=42, c=33)]
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的dict,它只包含上述所有字符串中的键,并且只有值完全相同时:
>>> dict_intersection(*dicts)
{"a": 3}
Run Code Online (Sandbox Code Playgroud)
我觉得应该有一种优雅的写作方式dict_intersection,但我自己只会提出不优雅和/或低效的解决方案.建议?
int*_*jay 20
>>> dict(set.intersection(*(set(d.iteritems()) for d in dicts)))
{'a': 3}
Run Code Online (Sandbox Code Playgroud)
注意:除了键之外,此解决方案还要求字典值可以清除.
由于键/值对必须已经在第一个 dict 中,因此您可以迭代此 dict 的项目。
dict(pair for pair in dicts[0].items()
if all((pair in d.items() for d in dicts[1:])))
Run Code Online (Sandbox Code Playgroud)
看起来不如 interjay 的答案优雅,但不受可散列值的限制。
编辑:将all表达式更改为生成器表达式以提高速度
| 归档时间: |
|
| 查看次数: |
6002 次 |
| 最近记录: |