Python将字典列表转换为另一个字典列表

时间:2016-05-17 23:08:46

标签: python list python-2.7 dictionary

我在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'}
]

对于我的生活,我想不出一个简单的“蟒蛇”方式来轻松做到这一点。当然有一个诀窍吗?任何人都知道一种有效的解决方法吗?

1 个答案:

答案 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'}
# ]