使用Python合并元组并渲染为直方图

python histogram data-processing

74 观看

1回复

1263 作者的声誉

这个问题已经在这里有了答案:

目前,我有一个元组列表,按每个元组中的第二个元素排序:

[('0xf2b5b8fb173e371cbb427625b0339f6023f8b4ec3701b7a5c691fa9cef9daf63',
  '121000'),
 ('0xf8f2a397b0f7bb1ff212b6bcc57e4a56ce3e27eb9f5839fef3e193c0252fab26',
  '121000'),
 ('0x8b0fe2b7727664a14406e7377732caed94315b026b37577e2d9d258253067553',
  '21000'),
 ('0x0abe75e40a954d4d355e25e4498f3580e7d029769897d4187c323080a0be0fdd',
  '21000'),
 ('0x8adfe7fc3cf0eb34bb56c59fa3dc4fdd3ec3f3514c0100fef800f065219b7707',
  '40000'),
 ('0x244b29b60c696f4ab07c36342344fe6116890f8056b4abc9f734f7a197c93341',
  '50000'),
 ('0x22c2b6490900b21d67ca56066e127fa57c0af973b5d166ca1a4bf52fcb6cf81c',
  '90000'),
 ('0x8570106b0385caf729a17593326db1afe0d75e3f8c6daef25cd4a0499a873a6f',
  '90000')]

我想做的是合并此集合,以使每个元组中的第二个元素成为键,并且它出现的次数变为值,如下所示:

'90000':  2
'50000':  1
'40000':  1
'21000':  2
'121000': 2

最终,我想将其呈现为直方图,但是我不确定如何实现此合并操作以及哪种数据结构最适合随后生成相应的直方图。

作者: smatthewenglish 的来源 发布者: 2017 年 9 月 15 日

回应 1


3

7198 作者的声誉

决定

您需要将其解析为每个元组的第二个元素的“平面列表”:

>>> my_list = [('0xf2b5b8fb173e371cbb427625b0339f6023f8b4ec3701b7a5c691fa9cef9daf63',
          '121000'),
         ('0xf8f2a397b0f7bb1ff212b6bcc57e4a56ce3e27eb9f5839fef3e193c0252fab26',
          '121000'),
         ('0x8b0fe2b7727664a14406e7377732caed94315b026b37577e2d9d258253067553',
          '21000'),
         ('0x0abe75e40a954d4d355e25e4498f3580e7d029769897d4187c323080a0be0fdd',
          '21000'),
         ('0x8adfe7fc3cf0eb34bb56c59fa3dc4fdd3ec3f3514c0100fef800f065219b7707',
          '40000'),
         ('0x244b29b60c696f4ab07c36342344fe6116890f8056b4abc9f734f7a197c93341',
          '50000'),
         ('0x22c2b6490900b21d67ca56066e127fa57c0af973b5d166ca1a4bf52fcb6cf81c',
          '90000'),
         ('0x8570106b0385caf729a17593326db1afe0d75e3f8c6daef25cd4a0499a873a6f',
          '90000')]
>>> flat_list = [x[1] for x in my_list]

然后,您可以Counter用来计算每个元素的外观:

>>> from collections import Counter
>>> Counter(flat_list)
Counter({'121000': 2, '21000': 2, '90000': 2, '40000': 1, '50000': 1})

编辑

当您需要一个阈值时,可以将一个条件添加到列表理解中:

flat_list = [x[1] for x in my_list if int(x[1]) > 1000]

聚苯乙烯

Counter 是dict的子类,因此您应该可以像dict一样做任何您想做的事,但是您也可以使用 dict(counter_result)

作者: Or Duan 发布者: 2017 年 9 月 15 日
32x32