首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python如何添加多个列表的和

Python如何添加多个列表的和
EN

Stack Overflow用户
提问于 2018-11-29 13:42:05
回答 4查看 98关注 0票数 2

下面是列表的列表。如何将“完全黑色”和“全色”的总和添加到一个保持“帐户ID”和“帐户名称”不变的列表中?

代码语言:javascript
复制
[[{'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'}]]

因此,结果将是:

代码语言:javascript
复制
[{'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'}]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-29 14:22:47

让我们用熊猫。

代码语言:javascript
复制
#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')

输出:

代码语言:javascript
复制
[{'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输出组合数据作为一个字典。

票数 2
EN

Stack Overflow用户

发布于 2018-11-29 15:13:19

设置

代码语言:javascript
复制
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

代码语言:javascript
复制
pd.DataFrame(sum(thing, [])).groupby(
    ['Account ID', 'Account Name'], as_index=False
).sum().to_dict('r')

merge_with

代码语言:javascript
复制
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}]
票数 4
EN

Stack Overflow用户

发布于 2018-11-29 13:51:43

代码语言:javascript
复制
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]
]

给出第一个子列表的结果。

代码语言:javascript
复制
[
    {'sum': 5, 'Account ID': '2222', 'Account Name': 'Moe'},
    {'sum': 9, 'Account ID': '3333', 'Account Name': 'Larry'},
    {'sum': 15, 'Account ID': '4444', 'Account Name': 'Curly'},
]

这就是你要找的吗?

现在,您只需要遍历外部列表,对每个包含的列表重复这一步骤。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53540403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档