我在python中有一个字典列表。这是一个有头发颜色和种族的典型例子。
some_list = [
{'blond': 3, 'race': 'WHITE'},
{'black': 4, 'race': 'WHITE'},
{'light brown': 6, 'race': 'WHITE'},
{'black': 2, 'race': 'AFRICAN_AMERICAN'},
{'blond': 1, 'race': 'AFRICAN_AMERICAN'},
{'dark brown': 1, 'race': 'AFRICAN_AMERICAN'}
]
头发颜色是关键之一,头发颜色的值是指给定比赛的头发颜色的人数。我不知道有多少头发颜色,也不知道有多少种族。我想将此列表转换为包含所有种族的所有头发颜色的计数,这样结果将包括0个未计入给定种族的颜色的计数:
some_list = [
{'blond': 3, 'race': 'WHITE'},
{'black': 4, 'race': 'WHITE'},
{'light brown': 6, 'race': 'WHITE'},
{'dark brown': 0, 'race': 'WHITE'},
{'black': 2, 'race': 'AFRICAN_AMERICAN'},
{'blond': 1, 'race': 'AFRICAN_AMERICAN'},
{'dark brown': 1, 'race': 'AFRICAN_AMERICAN'},
{'light brown': 0, 'race': 'AFRICAN_AMERICAN'}
]
对于我的生活,我想不出一个简单的“蟒蛇”方式来轻松做到这一点。当然有一个诀窍吗?任何人都知道一种有效的解决方法吗?
答案 0 :(得分:1)
如果我正确理解您的问题,并且您可以使用外部库,则可以使用pandas
完成此操作:
import pandas as pd
df = pd.DataFrame(some_list, index=None)
df = df.groupby(by='race').count().transpose()
for col in df.columns:
rw = df.loc[df[col] == 0]
dic = {rw.index[0]: 0, 'race': col}
some_list.append(dic)
# output:
# some_list = [
# {'blond': 3, 'race': 'WHITE'},
# {'black': 4, 'race': 'WHITE'},
# {'light brown': 6, 'race': 'WHITE'},
# {'black': 2, 'race': 'AFRICAN_AMERICAN'},
# {'blond': 1, 'race': 'AFRICAN_AMERICAN'},
# {'dark brown': 1, 'race': 'AFRICAN_AMERICAN'},
# {'light brown': 0, 'race': 'AFRICAN_AMERICAN'},
# {'dark brown': 0, 'race': 'WHITE'}
# ]