词典列表如下:
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'}]
但是它没有提供最新的元素。尝试了不同的可能性,但是没有运气。
答案 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,为每种类型添加一个新条目,如果您的日期更新(则只能以该特定日期格式使用,不建议这样做),请替换该条目。