2017-09-16 150 views
0

算獨特的價值觀和規模,我給自己買了一個數據集,看起來像這樣:使用python通過頻率

[ 
    {'A':'0'}, 
    {'B':'0'}, 
    {'C':'1'} 
] 

我想它transmogrify成一個數據集,看起來像這樣:

[ 
    {'0':'2'}, 
    {'1':'1'} 
] 

本質任務計數的值,

併爲每個獨特的價值

中創建一個數據結構

那些唯一條目中的每一個新的條目(再次,基於該值)

遞增相應條目,

基本上任務被清點向上所有的時候我們都看到了獨特的價值觀,並通過數值表達的次數來放大。

什麼是最有效的方式來做到這一點在python中?

我一直在嘗試用計數器,但迄今沒有成功,我的基本數據結構似乎是不相容的,代碼庫是這樣的:

dict_hash_gas = list() 
for line in inpt: 
    resource = json.loads(line) 
    dict_hash_gas.append({resource['first']:resource['second']}) 

和數據集是這樣的:

{"first":"A","second":"0","third":"2"} 
{"first":"B","second":"0","third":"2"} 
{"first":"C","second":"1","third":"2"} 

回答

1

您可以使用一個Counter很容易:

>>> data = [ 
...  {'A':'0'}, 
...  {'B':'0'}, 
...  {'C':'1'} 
... ] 
>>> import collections 
>>> counts = collections.Counter(v for d in data for v in d.values()) 
>>> counts 
Counter({'0': 2, '1': 1}) 

現在,爲了得到你想要的最終名單,簡單地說:

>>> [{k:v} for k,v in counts.items()] 
[{'0': 2}, {'1': 1}] 

雖然,我不知道你爲什麼會想這樣名單,我只能推測一些基於REST的API期待這種格式的一些JSON ...

+0

很好 - 非常感謝。你知道爲什麼我把它打印到控制檯,它總是呈現這樣的'Counter({u'0':2,u'1':1})'',即在那裏寫有'Counter'?是否有可能將其進一步轉換爲正常字典? –

+0

也 - 你會推薦一種特殊的方式來把它變成一個直方圖? –

+0

@ s.matthew.english,因爲它是*'Counter' * ...否?如果你想要一個正規的字典,只需使用'dict(counts)'。雖然真的,你爲什麼? –

1
result = dict() 

for name, value in input.items(): 
    result.update({value: result.get(value, 0) + 1}) 
+0

它不工作,大概是因爲我有一個元組列表 - 產生以下錯誤'AttributeError:'列表'對象沒有屬性'項目' –

+0

不要使用' .update',你創建一箇中間字典,你立即扔掉。只需使用'result [value] = result.get(value,0)+ 1',或者更好的方式,使用'Counter'或'defaultdict',並且把這個調用放到'.get' –