[英]Find & count identical values in a row in a sorted dict in Python?
我通过其中一个键(日期/时间)对字典进行了排序。 我想将8个连续匹配的键值(“艺术家”和“专辑”)算作1张专辑。 这可能吗?
from datetime import datetime, timedelta
from itertools import groupby
def change_date(self):
entries = self.data_to_dict()
entries.sort(key=lambda x: (x['datetime']), reverse=False)
for x in entries:
album = x['artist'], x['album']
grouped_album = [(k, sum(1 for i in g)) for k,g in groupby(album)]
print grouped_album
上面的输出如下。 我看到它几乎按照我想要的方式工作,但是groupby能否接受2个密钥并将它们作为1个元素处理? 还是我应该避开groupby?
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('The War on Drugs', 1), ('Slave Ambient (Deluxe Edition)', 1)]
[('Arcade Fire', 1), ('Funeral', 1)]
[('Arcade Fire', 1), ('Reflektor', 1)]
[('Arcade Fire', 1), ('The Suburbs', 1)]
[('Tame Impala', 1), ('Lonerism', 1)]
[('Tame Impala', 1), ('Lonerism', 1)]
原始数据的格式如下:
[{'album': 'Lonerism', 'song': 'Led Zeppelin (Bonus Track)', 'datetime': '2014-12-10 08:03:00', 'artist': 'Tame Impala'}, {'album': 'Lonerism', 'song': 'Feels Like We Only Go Backwards', 'datetime': '2014-12-10 08:00:00', 'artist': 'Tame Impala'}, {'album': 'The Suburbs', 'song': 'Empty Room', 'datetime': '2014-12-10 07:57:00', 'artist': 'Arcade Fire'}]
由于最后3行是循环执行的,因此groupby
每次仅接收一张专辑。
您应该删除for(最后4行)的内部,然后执行以下操作:
首先将entries
转换为albums
:
albums = [(x['artist'], x['album']) for x in entries]
然后将所有相册分组在一起:
grouped_albums = [(k, sum(1 for _ in g)) for k,g in groupby(albums)]
顺便说一句-字典未排序。 您拥有的不是字典,而是元组列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.