2016-05-17 509 views
3

我有一個Python的字典列表。這是一個與頭髮顏色和種族相關的示例。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'} 
] 

對於我的生活,我想不出一種簡單的「python」方式來輕鬆實現這一點。這肯定有一個竅門?任何人都知道解決這個問題的有效方法嗎?

+1

向我們展示你嘗試過什麼。我也認爲你選擇的數據結構有點奇怪。 – L3viathan

+0

您可以迭代並使用'set(..)'查找唯一的顏色/種族,然後使用'itertools.product(..)'查找所有組合。填入零,你不會在'some_list'中輸入。告訴我們你卡在哪裏。 – SuperSaiyan

+0

多數民衆贊成在那裏我被卡住了......我有一個獨特的名單已經...如第一個代碼片段所示...但我不知道一個好方法迭代並填寫缺少的頭髮顏色給定種族。 itertools.product(..)如何提供幫助? – Brent

回答

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