下面是列表的列表。如何将“完全黑色”和“全色”的总和添加到一个保持“帐户ID”和“帐户名称”不变的列表中?
[[{'Total Black': 3, 'Total Color': 2, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 5, 'Total Color': 4, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 9, 'Total Color': 6, 'Account ID': '4444', 'Account Name': 'Curly'}],
[{'Total Black': 8, 'Total Color': 4, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 2, 'Total Color': 7, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 11, 'Total Color': 9, 'Account ID': '4444', 'Account Name': 'Curly'}]]因此,结果将是:
[{'Total Black': 11, 'Total Color': 6, 'Account ID': '2222', 'Account Name':
'Moe'}, {'Total Black': 7, 'Total Color': 11, 'Account ID': '3333', 'Account
Name': 'Larry'}, {'Total Black': 20, 'Total Color': 15, 'Account ID': 4444,
'Account Name': 'Curly'}]发布于 2018-11-29 14:22:47
让我们用熊猫。
#From @C14L setup:
li = [
[
{'Total Black': 3, 'Total Color': 2, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 5, 'Total Color': 4, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 9, 'Total Color': 6, 'Account ID': '4444', 'Account Name': 'Curly'}
],
[
{'Total Black': 8, 'Total Color': 4, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 2, 'Total Color': 7, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 11, 'Total Color': 9, 'Account ID': '4444', 'Account Name': 'Curly'}
]
]
pd.concat([pd.DataFrame(li[i]) for i in range(len(li))])\
.groupby(['Account ID','Account Name'])\
.sum()\
.reset_index()\
.to_dict(orient='records')输出:
[{'Account ID': '2222',
'Account Name': 'Moe',
'Total Black': 11,
'Total Color': 6},
{'Account ID': '3333',
'Account Name': 'Larry',
'Total Black': 7,
'Total Color': 11},
{'Account ID': '4444',
'Account Name': 'Curly',
'Total Black': 20,
'Total Color': 15}]详细信息:
首先,我们使用列表理解和熊猫dataframe构造函数为原始列表中的每个元素和字典构建数据。
接下来,使用pd.concat将这两者(在本例中为dataframes合并为一个组合的dataframe )。
使用“组”和“和”来聚合“总颜色”和“总黑色”的值。
最后,重置索引和to_dict输出组合数据作为一个字典。
发布于 2018-11-29 15:13:19
设置
thing = [
[{'Total Black': 3, 'Total Color': 2, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 5, 'Total Color': 4, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 9, 'Total Color': 6, 'Account ID': '4444', 'Account Name': 'Curly'}],
[{'Total Black': 8, 'Total Color': 4, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 2, 'Total Color': 7, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 11, 'Total Color': 9, 'Account ID': '4444', 'Account Name': 'Curly'}]
]非常类似于ScottBoston
pd.DataFrame(sum(thing, [])).groupby(
['Account ID', 'Account Name'], as_index=False
).sum().to_dict('r')merge_with
from itertools import chain
from toolz.dicttoolz import merge_with
from collections import defaultdict
idkey = ('Account ID', 'Account Name')
x = defaultdict(list)
for d in map(dict, chain(*thing)):
x[(*map(d.pop, idkey),)].append(d)
[{**dict(zip(idkey, key)), **merge_with(sum, *d)} for key, d in x.items()]
[{'Account ID': '2222',
'Account Name': 'Moe',
'Total Black': 11,
'Total Color': 6},
{'Account ID': '3333',
'Account Name': 'Larry',
'Total Black': 7,
'Total Color': 11},
{'Account ID': '4444',
'Account Name': 'Curly',
'Total Black': 20,
'Total Color': 15}]发布于 2018-11-29 13:51:43
li = [
[
{'Total Black': 3, 'Total Color': 2, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 5, 'Total Color': 4, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 9, 'Total Color': 6, 'Account ID': '4444', 'Account Name': 'Curly'}
],
[
{'Total Black': 8, 'Total Color': 4, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 2, 'Total Color': 7, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 11, 'Total Color': 9, 'Account ID': '4444', 'Account Name': 'Curly'}
]
]
result = [
{
'sum': x['Total Black'] + x['Total Color'],
'Account ID': x['Account ID'],
'Account Name': x['Account Name']
} for x in li[0]
]给出第一个子列表的结果。
[
{'sum': 5, 'Account ID': '2222', 'Account Name': 'Moe'},
{'sum': 9, 'Account ID': '3333', 'Account Name': 'Larry'},
{'sum': 15, 'Account ID': '4444', 'Account Name': 'Curly'},
]这就是你要找的吗?
现在,您只需要遍历外部列表,对每个包含的列表重复这一步骤。
https://stackoverflow.com/questions/53540403
复制相似问题