使用 Python 合并元组并呈现为直方图
Consolidate tuple and render as histogram using Python
目前我有一个按每个元组中的第二个元素排序的元组列表:
[('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
最终我想将其呈现为直方图,但我不确定如何实现此合并操作以及哪种数据结构最适合随后生成相应的直方图。
您需要将其解析为每个元组的第二个元素的“平面列表”:
>>> 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]
P.S
Counter
是一个 dict 子类,所以你应该能够像 dict 一样做任何你想做的事情,但你也可以用 dict(counter_result)
来转换它
目前我有一个按每个元组中的第二个元素排序的元组列表:
[('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
最终我想将其呈现为直方图,但我不确定如何实现此合并操作以及哪种数据结构最适合随后生成相应的直方图。
您需要将其解析为每个元组的第二个元素的“平面列表”:
>>> 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]
P.S
Counter
是一个 dict 子类,所以你应该能够像 dict 一样做任何你想做的事情,但你也可以用 dict(counter_result)