查找&;在Python中,在排序的dict中对行中的相同值进行计数?

查找&;在Python中,在排序的dict中对行中的相同值进行计数?,python,python-2.7,sorting,dictionary,Python,Python 2.7,Sorting,Dictionary,我按其中一个键对字典进行了排序,即日期/时间。我想将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=Fa

我按其中一个键对字典进行了排序,即日期/时间。我想将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个元素处理吗?还是我应该一起避开群比

[('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行),并执行以下操作:

[{'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'}]
首先将
条目
转换为
相册

albums = [(x['artist'], x['album']) for x in entries]
然后将所有相册分组:

grouped_albums = [(k, sum(1 for _ in g)) for k,g in groupby(albums)]

顺便说一句-DICT未排序。您拥有的不是一个dict,而是一个元组列表。

非常感谢!我知道dicts是无序的,但我没有意识到sort()会将它们变成元组。