使用python计算唯一值并按频率缩放

使用python计算唯一值并按频率缩放,python,data-processing,Python,Data Processing,我有一个数据集,看起来像这样: [ {'A':'0'}, {'B':'0'}, {'C':'1'} ] [ {'0':'2'}, {'1':'1'} ] dict_hash_gas = list() for line in inpt: resource = json.loads(line) dict_hash_gas.append({resource['first']:resource['second']}) {"first":"A

我有一个数据集,看起来像这样:

[
    {'A':'0'},
    {'B':'0'}, 
    {'C':'1'}
]
[
    {'0':'2'},
    {'1':'1'}
]
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"} 
我想将其转换为如下所示的数据集:

[
    {'A':'0'},
    {'B':'0'}, 
    {'C':'1'}
]
[
    {'0':'2'},
    {'1':'1'}
]
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"} 
基本上,任务是计算价值

对于每个唯一的值

在数据结构中创建新条目

对于这些唯一条目中的每一个(再次基于值)

要增加相应的条目

基本上,我们的任务是统计我们看到的唯一值的所有时间,并将其放大表示该值的次数

在python中,最有效的方法是什么

我一直在尝试计数器,但迄今为止没有太大成功,因为我的基本数据结构似乎不兼容,代码库如下所示:

[
    {'A':'0'},
    {'B':'0'}, 
    {'C':'1'}
]
[
    {'0':'2'},
    {'1':'1'}
]
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"} 
数据集如下所示:

[
    {'A':'0'},
    {'B':'0'}, 
    {'C':'1'}
]
[
    {'0':'2'},
    {'1':'1'}
]
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"} 

您可以非常轻松地使用
计数器

>>> 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…

您可以非常轻松地使用
计数器

>>> 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…

它不起作用,可能是因为我有一个元组列表-生成以下错误
AttributeError:“list”对象没有属性“items”
不要使用
。update
,你创建了一个中间字典,然后马上扔掉。只需使用
result[value]=result.get(value,0)+1
,或者使用
Counter
defaultdict
并放弃调用
。get
它不起作用,大概是因为我有一个元组列表-生成以下错误
AttributeError:“list”对象没有属性“items”
不使用
。更新
,您创建了一个中间字典,然后立即扔掉。只需使用
result[value]=result.get(value,0)+1
,或者更好的方法是使用
Counter
defaultdict
并放弃调用
。get
nice-非常感谢。顺便说一句,你知道为什么我把它打印到控制台上,它总是呈现这样的
计数器({u'0':2,u'1':1})
,也就是说,写在那里的
计数器
?是否有可能将其进一步转换为正常的dict?另外-您是否建议使用一种特殊的方法将其转换为直方图?@s.matthew.english,因为它是一个
计数器
。。。不如果您想要一个常规的dict,只需使用
dict(counts)
。尽管如此,你为什么要?@s.matthew.english你的意思是,绘制它吗?是的,准确地说-我想将它绘制为直方图/条形图尼斯-非常感谢。顺便说一句,你知道为什么我把它打印到控制台上,它总是呈现这样的
计数器({u'0':2,u'1':1})
,也就是说,写在那里的
计数器
?是否有可能将其进一步转换为正常的dict?另外-您是否建议使用一种特殊的方法将其转换为直方图?@s.matthew.english,因为它是一个
计数器
。。。不如果您想要一个常规的dict,只需使用
dict(counts)
。尽管如此,你为什么要?@s.matthew.english你的意思是,绘制它吗?是的,准确地说-我想将它绘制为柱状图/条形图