2015-08-14 72 views
-2

我有幾本字典,我想合併爲pd.DataFrame。爲了能夠做到這一點,所有的字典都需要維度爲1.如何將以下字典的維度減少到1,以便它仍然是字典?在字典項目有多個條目的情況下,它應該簡單地加入。所以myFunds應該成爲'2.0 0.0'將字典維數減少爲1

h = { 
    'gameStage': 'PreFlop', 
    'losses': 0, 
    'myFunds': [2.0, '0.0'], 
    'myLastBet': 0, 
    'peviousRoundCards': ['2S', 'QS'], 
    'previousCards': ['2S', 'QS'], 
    'previousPot': 0.03, 
    'wins': 0 
} 

更準確地說我的問題是什麼:我想保存在DataFrame對象的所有屬性。爲此,我做了vars(Object)這給了我一本字典,但並不是所有的條目都有相同的維度,所以我不能做DataFrame(vars(Object)),因爲我得到一個錯誤。這就是爲什麼我需要首先將vars(Object)轉換爲一維字典。但它需要保持字典,否則我不能將其轉換爲DataFrame

+0

您的問題標題與您的問題內容無關。你想加入列表值嗎? – Kasramvd

+1

相關問題:[Loop over a dictionary](http://stackoverflow.com/questions/3294889/iterating-over-dictionaries-using-for-loops-in-python),[make list from list](http:/ /stackoverflow.com/questions/12453580/concatenate-item-in-list-to-strings-python) – leo

+0

是的,我想加入的價值觀。看修改後的問題。 – Nickpick

回答

2

您可以遍歷字典中的項目,然後用str.join()將它們弄平。

基本上我們告訴它遍歷字典中的值的每個鍵/值對,把它轉化爲一個字符串(如你不能連接的intstring),然後把它放回sictionary

功能funcfrom here和它的作用是確保我們始終有一個可迭代的項目

from collections import Iterable 

def func(x): 
    #use str instead of basestring if Python3 
    if isinstance(x, Iterable) and not isinstance(x, basestring): 
     return x 
    return [x] 

for key, val in h.items(): 
    h[key] = " ".join([str(ele) for ele in func(val)]) 

h輸出變爲:

{ 
    'gameStage': 'PreFlop', 
    'losses': '0', 
    'myFunds': '2.0 0.0', 
    'myLastBet': '0', 
    'peviousRoundCards': '2S QS', 
    'previousCards': '2S QS', 
    'previousPot': '0.03', 
    'wins': '0' 
} 
+0

我不認爲你需要列表理解。你可以使它成爲一個生成器:'「」.join(val中爲ele的str(ele))' –

+0

有些值不是列表。 –

+0

我已經更新了這個,謝謝你指出@PeterWood – Parker