2015-08-14 65 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