在python中,基于其中的特定键合并这两个json对象?(Plz视图示例)
有没有办法根据“matchID”匹配这些json对象,并将它们合并成一个具有合并数据的对象?我基本上是想让它们组成一个表,包含每个参加相同比赛id的球员的统计数据 输入:在python中,基于其中的特定键合并这两个json对象?(Plz视图示例),python,django,algorithm,Python,Django,Algorithm,有没有办法根据“matchID”匹配这些json对象,并将它们合并成一个具有合并数据的对象?我基本上是想让它们组成一个表,包含每个参加相同比赛id的球员的统计数据 输入: data_list = [ { "kloweritotv#3560772":[ { "kd":2, "kills":6,
data_list = [
{
"kloweritotv#3560772":[
{
"kd":2,
"kills":6,
"teamPlacement":3,
"damageDone":2388,
"matchID":"12887455297423544724"
},
{
"kd":1,
"kills":4,
"teamPlacement":14,
"damageDone":1828,
"matchID":"11929202821836542057"
},
]
},
{
"Stylnox07":[
{
"kd":4.5,
"kills":9,
"teamPlacement":3,
"damageDone":2549,
"matchID":"12887455297423544724"
},
{
"kd":1.5,
"kills":3,
"teamPlacement":14,
"damageDone":1008,
"matchID":"11929202821836542057"
}
}
]
所需输出(伪代码):
任何信息都会非常有用!蒂亚
更新:取出额外的火柴以便于理解。换句话说,如果用户1有match_id 123,用户2也有match_id 123,那么它们都应该与各自的数据合并在一个match_id 123下。如何合并它们?我在字段中看到了最小值和最大值的组合…其中有
的“matchID”:“41968367861917674”
进入了所需的输出。它似乎丢失了,因此与输入不一致。@danimesjo因此您可以看到输入如何包含一个用户及其所有匹配项。基本上,每个匹配都有一个ID,其他用户也可能是其中的一部分。因此,如果它们都有相同的匹配id,那么它们应该在一个匹配id下,并且它们的统计数据应该在该匹配id下,如输出中所述。另外,我不想让match_id成为一个键,因为以后如果id都不一样,那么就很难迭代。@D.L我更新了这个问题,我想对这个例子做的是,如果match_id在两个玩家中都不存在,那么我们就不合并它。但我们现在可以忽略这个问题。我更关心第一个问题。谢谢你的帮助!有具体问题吗?你试过什么,做过什么研究吗?请看。
def collect_data(key_id, match_id):
d = []
for k1 in data_list:
for k2 in k1:
if k2 != key_id: continue
for e in k1[k2]:
if e.get('matchID', None) == match_id:
e1 = e.copy()
e1.pop('matchID')
d.append(e1)
return d
dics = {}
for k1 in data_list:
for k2 in k1:
for e in k1[k2]:
m = e.get('matchID', None)
if m is None: continue
if not m in dics: dics[m] = {}
dics[m].update({k2: collect_data(k2, m)})
def collect_data(key_id, match_id):
d = []
for k1 in data_list:
for k2 in k1:
if k2 != key_id: continue
for e in k1[k2]:
if e.get('matchID', None) == match_id:
e1 = e.copy()
e1.pop('matchID')
d.append(e1)
return d
dics = {}
for k1 in data_list:
for k2 in k1:
for e in k1[k2]:
m = e.get('matchID', None)
if m is None: continue
if not m in dics: dics[m] = {}
dics[m].update({k2: collect_data(k2, m)})