使用 python 计算唯一值并按频率缩放
using python to count unique values and scale by frequency
我有一个如下所示的数据集:
[
{'A':'0'},
{'B':'0'},
{'C':'1'}
]
我想将其转换成如下所示的数据集:
[
{'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"}
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 那种格式...
我有一个如下所示的数据集:
[
{'A':'0'},
{'B':'0'},
{'C':'1'}
]
我想将其转换成如下所示的数据集:
[
{'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"}
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 那种格式...