合并元组,并使用Python
问题描述:
目前我在每个元组的第二个元素进行排序元组的列表呈现为柱状图:合并元组,并使用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]
PS
Counter
是一个字典子类,所以你应该能够做你想做就像字典什么,但你也可以用dict(counter_result)
wow-谢谢你丢 - 这是一个很好的答案!同时我们谈到了这个问题 - 你知道一个修剪所有记录的值低于某个阈值的好方法吗? –
是的,你可以很容易地添加一个条件,检查我的编辑。 –
嗯,我只是试了一下,但它似乎没有认出条件门槛 –