【发布时间】:2015-10-25 03:26:37
【问题描述】:
我有两个格式的字典列表:
systolic_sex = [
{'attribute': u'bp', 'value_d': 133.0, 'value_s': u'133', 'sid': 6},
{'attribute': u'bp', 'value_d': 127.0, 'value_s': u'127', 'sid': 17},
{'attribute': u'bp', 'value_d': 121.0, 'value_s': u'121', 'sid': 18},
{'attribute': u'bp', 'value_d': 127.0, 'value_s': u'127', 'sid': 27},
{'attribute': u'bp', 'value_d': 120.0, 'value_s': u'120', 'sid': 42},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 6},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 17},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 18},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 27},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 42}
]
sex = [
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 6},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 17},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 42}
]
我想通过键 'sid' 的值来匹配这些列表,这样如果两者中的 'sid' 值相同,我就有一个匹配项,否则我没有。如果我有一个匹配项,然后我将两个集合中的 'sid' 匹配的字典相应地附加到一个新列表中,如下所示
new_set = [
{'attribute': u'bp', 'value_d': 133.0, 'value_s': u'133', 'sid': 6},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 6},
{'attribute': u'bp', 'value_d': 127.0, 'value_s': u'127', 'sid': 17},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 17},
{'attribute': u'bp', 'value_d': 120.0, 'value_s': u'120', 'sid': 42},
{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 42}
]
我尝试了各种方法来将它们相交,包括修改来自 Match set of dictionaries 的答案,但我希望创建一个具有匹配 sid 的字典的新列表,而不是替换两个列表之间的值。
【问题讨论】:
-
你能展示一下在这种情况下所需的输出应该是什么样子吗?听起来您实际上想加入
sid“列”上的两个“表”? -
LOL 出于某种原因,输出与我想象的完全不同。删除了我的答案。
-
这是一个很好的数据重新映射!对未来的工作很有用。
-
注意:设置的性别可以是 systolic_sex 的形式,也就是说,在 'sid' 键的单个值上具有多个不同的 'attribute' 键值集。例如,我可以有两个集合,systolic_sex 和 diastolic_sex,然后通过 'sid' 匹配所有键。抱歉,如果在原始帖子中不清楚。在任何情况下,@dawg 的解决方案都可以解决这个问题,尽管我没有明确说明这个要求。
标签: python dictionary intersection