簡體   English   中英

Python將字典列表轉換為另一個字典列表

[英]Python transform list of dictionaries into another list of dictionaries

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

對於我的生活,我想不出一個簡單的“蟒蛇”方式來輕松做到這一點。 當然有一個訣竅嗎? 任何人都知道一種有效的解決方法嗎?

如果我正確理解你的問題,並且你能夠使用外部庫,你可以用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'}
# ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM