繁体   English   中英

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

[英]using python to count unique values and scale by frequency

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

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

我想将其转化为如下所示的数据集:

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

本质上,任务是计算价值,

并为每个唯一值

在数据结构中创建一个新条目

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

增加相应的条目,

基本上,任务是统计我们看到的唯一值的所有时间,并通过表达该值的次数来放大。

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

我一直在尝试使用counter,但是到目前为止,由于我的基本数据结构似乎不兼容,因此代码库看起来像这样:

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"} 
result = dict()

for name, value in input.items():
    result.update({value: result.get(value, 0) + 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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM