如何在不使用循环的情况下将著名作者列表汇总到另一个词典?

2024-06-01 20:13:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在以下著名作者列表中,每个元组都有以下项: (作者、出售的副本、编写的书籍、国籍)

FamousAuthors =
 [(‘Agatha Christie’, 3000000, 85, ‘English’),
 (‘William Shakespeare’, 3000000, 42, ‘English’),
 (‘Barbara Cartland’, 750000, 723, ‘English’),
 (‘Danielle Steel’, 650000, 179, ‘American’),
 (‘Harold Robbins’, 750000, 23, ‘American’),
 (‘Georges Simenon’, 600000, 570, ‘Belgian’),
 (‘Enid Blyton’, 500000, 800, ‘English’),
 (‘Sidney Sheldon’, 485000, 21, ‘American’),
 (‘Gilbert Patten’, 312500, 209, ‘American’),
 (‘Dr. Seuss’, 300000, 44, ‘American’),
 (‘J. K. Rowling’, 280000, 15, ‘English’)]

创建字典结构以总结FamousAuthors中的数据,其中每个键都是 National和对应的值是一个包含 A.作者数量, B售出的总份数, C总共写了几本书。 为了那个国籍。显示字典

我只能用for循环来写这个。你能告诉我一些更直观更简单的方法吗


Tags: 列表字典english副本作者shakespeare书籍元组
1条回答
网友
1楼 · 发布于 2024-06-01 20:13:06

每当你遇到这样的问题,答案总是熊猫。在任务中使用字典是非常不实际的,因为您需要迭代这些项

首先将列表转换为DataFrame

import pandas as pd

FamousAuthors = [
    ('Agatha Christie', 3000000, 85, 'English'),
    ('William Shakespeare', 3000000, 42, 'English'),
    ('Barbara Cartland', 750000, 723, 'English'),
    ('Danielle Steel', 650000, 179, 'American'),
    ('Harold Robbins', 750000, 23, 'American'),
    ('Georges Simenon', 600000, 570, 'Belgian'),
    ('Enid Blyton', 500000, 800, 'English'),
    ('Sidney Sheldon', 485000, 21, 'American'),
    ('Gilbert Patten', 312500, 209, 'American'),
    ('Dr. Seuss', 300000, 44, 'American'),
    ('J. K. Rowling', 280000, 15, 'English')
]

df = pd.DataFrame(FamousAuthors, columns=['author', 'copies',  'books', 'nationality'])

熊猫的美丽之处在于它非常具有陈述性,就好像你在和别人说话一样

df.groupby('nationality').sum().T.to_dict('list')


{'American': [2497500, 476],
 'Belgian': [600000, 570],
 'English': [7530000, 1665]}

编辑

还增加了按国籍分列的作者人数:

df.groupby('nationality').agg({'author': 'count', 'copies': 'sum', 'books': 'sum'}).T.to_dict('list')

{'American': [5, 2497500, 476],
 'Belgian': [1, 600000, 570],
 'English': [5, 7530000, 1665]}

如注释中所述,{}表示转置

相关问题 更多 >