【发布时间】:2019-01-09 19:21:46
【问题描述】:
描述我想要实现的最佳方式是参考 SQL 函数 INNER JOIN 如何用于显示两个表中的数据,由匹配的列名确定。
我想实现类似的功能,但通过使用 Python(最好是 3.x),而不是具有匹配列名的表,我想将两个字典的整体组合在一起,基于匹配 {k: v} 对。
例如...
lst_1 = [
{
'City' : 'Boston',
'State' : 'Massechusets',
'Name' : 'Kim Tuttles',
'Country' : 'United State'
},
{
'City' : 'Portland',
'Name' : 'Larry Bird',
'State' : 'Oregon'
},
{
'City' : 'Chicago',
'Name' : 'John Jacobs',
'State' : 'Illinois'
}
]
lst_2 = [
{
'Hobby' : 'Tennis',
'Build' : 'Athletic',
'Height' : 'Six Feet, One Inch',
'Name' : 'Kim Tuttles',
'Birthplace': 'Italy'
},
{
'Name' : 'John Jacobs',
'Hobby' : 'Baseball',
'Build' : 'Muscular',
'Height' : 'Five Feet, Eight Inches'
}
]
我想找到一种方法来合并每个列表中的字典,但只能找到匹配的 {Key: Value} 对。结果应该是这样的......
merged_lst = [
{
'Hobby' : 'Tennis',
'Build' : 'Athletic',
'Height' : 'Six Feet, One Inch',
'Birthplace': 'Italy'
'City' : 'Boston',
'State' : 'Massechusets',
'Name' : 'Kim Tuttles', # Merge on matching name
'Country' : 'United State'
},
{
'Name' : 'John Jacobs', # Merge on matching name
'Hobby' : 'Baseball',
'Build' : 'Muscular',
'Height' : 'Five Feet, Eight Inches'
'City' : 'Chicago',
'State' : 'Illinois'
}
]
我设法找到了一种使用dict.update 和zip() 合并字典的方法,尽管这只是在处理两个独立的字典时,它仍然不太正确。感谢您的任何建议,并在此先感谢您。
【问题讨论】:
-
你提前知道匹配键(
'Name'这里)吗? -
幸运的是,它在任一列表中的每个字典中都是一致的。因此,在上述情况下,如您所述,它将是
'Name'。 -
除了“名称”之外,还有其他重复的键吗?如果有,结果中哪个优先?
-
不,匹配的 {Key: Value} 对的唯一出现将在
'Name'上,但可以在列表中的任何深度、字典中的任何位置找到匹配项。有点像“嗯,它就在某处”之类的东西。 -
是否可以假设每个列表中每个
'Name'仅出现一次?
标签: python json python-3.x dictionary nested