在字典列表中查找公共(public)键值对的pythonic方法

标签 python dictionary intersection

我有一个字典列表。

alljson = [{'EchoTime': 0,
  'FlipAngle': 90,
  'MRAcquisitionType': '2D',
  'MagneticFieldStrength': 3,
  'Manufacturer': 'SIEMENS',
  'ManufacturerModelName': 'TrioTim',
  'RepetitionTime': 2,
  'ScanOptions': 'FS',
  'ScanningSequence': 'AP',
  'SequenceVariant': 'SK',
  'TaskName': 'Tom'},
 {'EchoTime': 0,
  'FlipAngle': 90,
  'MRAcquisitionType': '2D',
  'MagneticFieldStrength': 3,
  'Manufacturer': 'SIEMENS',
  'ManufacturerModelName': 'TrioTim',
  'RepetitionTime': 2,
  'ScanOptions': 'FS',
  'ScanningSequence': 'EP',
  'SequenceVariant': 'SK',
  'TaskName': 'fb'},
 {'EchoTime': 0,
  'FlipAngle': 90,
  'MRAcquisitionType': '2D',
  'MagneticFieldStrength': 3,
  'Manufacturer': 'SIEMENS',
  'ManufacturerModelName': 'TrioTim',
  'RepetitionTime': 2,
  'ScanOptions': 'FS',
  'ScanningSequence': 'EP',
  'SequenceVariant': 'HK', 
  'TaskName': 'Tom-loc'}]

现在我打算从字典列表中找到所有常见的键值对。 什么是最pythonic的方式来做到这一点。

注意:key 和 value 都应该匹配,并且 k:v 对应该存在于所有字典中

我尝试了所有建议的解决方案 here但是给定的值是不可哈希的,没有一个解决方案完全有效。

有什么建议吗?

最佳答案

将每个字典的项目列表转换成一个集合,找到集合的交集,并可选择将结果转换回字典:

dict(set.intersection(*[set(d.items()) for d in alljson]))
#{'MRAcquisitionType': '2D', 'FlipAngle': 90, 'RepetitionTime': 2,
# 'ScanOptions': 'FS', 'ManufacturerModelName': 'TrioTim', 
# 'Manufacturer': 'SIEMENS', 'SequenceVariant': 'SK', 'EchoTime': 0, 
# 'MagneticFieldStrength': 3, 'ScanningSequence': 'EP'}

关于在字典列表中查找公共(public)键值对的pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42820548/

相关文章:

python - 如何通过python中的套接字将字符串发送到java服务器?

python - 字典到 CSV 文件 : Ordering of columns

c++ - 从 std::map 多个键中删除的最佳技术

javascript - 有离线词库吗?它应该可以通过 Node 应用程序进行搜索

algorithm - 快速球网格相交

python - 如何在 Python 的 `asyncio.gather` 中正确处理取消的任务

python - 列表内的映射转换

javascript - 如何提取两个节点之间的文本内容

javascript多边形相交

java - 线-三角形交点检查返回错误的交点