根据字典列表中的两个值获取字典列表

时间:2019-04-24 14:57:22

标签: python dictionary

词典列表如下:

lst_dict = [{'type': 'email', 'count': '180', 'date': '2019-04-22'},
            {'type': 'text', 'count': '12', 'date': '2018-12-20'},
            {'type': 'email', 'count': '150','date': '2018-12-20'}]

我对按类型和最新日期获取元素的唯一列表感兴趣。因此,预期结果是:

[{'type': 'email', 'count': '180', 'date': '2019-04-22'},
{'type': 'text', 'count': '12', 'date': '2018-12-20'}]

要按类型获取唯一元素,我做了:

list({item['type']: item for item in lst_dict}.values())

结果是:

[{'type': 'email', 'count': '150', 'date': '2018-12-20'},
 {'type': 'text', 'count': '12', 'date': '2018-12-20'}]

但是它没有提供最新的元素。尝试了不同的可能性,但是没有运气。

3 个答案:

答案 0 :(得分:3)

这是使用itertools.groupby的一种方法:

from itertools import groupby
l = sorted(lst_dict, key=lambda x: x['type'])
[max(list(v), key=lambda x: x['date']) for _,v in groupby(l, key=lambda x: x['type'])]

输出

[{'count': '180', 'date': '2019-04-22', 'type': 'email'},
 {'count': '12', 'date': '2018-12-20', 'type': 'text'}]

答案 1 :(得分:1)

如果要保留代码,则可以按日期提前对列表进行排序,似乎您的代码行将采用列表中与相同类型匹配的最后一个条目。

lst_dict = [{'type': 'email', 'count': '180', 'date': '2019-04-22'},
            {'type': 'text', 'count': '12', 'date': '2018-12-20'},
            {'type': 'email', 'count': '150','date': '2018-12-20'}]
lst_dict.sort(key=lambda x: x['date'])
print(list({item['type']: item for item in lst_dict}.values()))

答案 2 :(得分:0)

我的解决方案:

from tkinter import *

master = Tk()

def callback(text: Text):
    text.delete('1.0', END)
    text.insert(END, 'text1\r\n')
    text.insert(END, 'text2\r\n')
    text.insert(END, 'text3\r\n')
    text.insert(END, 'text4\r\n')
    text.insert(END, 'text5\r\n')
    text.insert(END, 'text6\r\n')
    text.insert(END, 'text7\r\n')

textwidget = Text(master)
textwidget .pack()
b = Button(master, text="OK", command=lambda :callback(textwidget))
b.pack()

mainloop()

您创建一个新的dict,为每种类型添加一个新条目,如果您的日期更新(则只能以该特定日期格式使用,不建议这样做),请替换该条目。