[英]Printing Matching Keys Python
我有一个字典列表
d = [{"Date": "2020/10/03 3:30", "Name": "John"}, {"Date": "2020/10/03 5:15", "Name": "Harry"}, {"Date": "2020/10/05 6:30", "Name": "Rob"}]
我只想打印具有相同日期的名称。
Output:
John
Harry
我不确定如何实现这一点,有什么提示吗?
通过遍历条目列表并在新字典中收集带有名称的日期,您的问题可以轻松解决。 因此,您将日期用作字典的键,并将名称添加到该日期的相应列表中。 我正在添加一个代码片段,可以很容易地做到这一点:
d = [{"Date": "2020/10/03 3:30", "Name": "John"}, {"Date": "2020/10/03 5:15","Name": "Harry"}, {"Date": "2020/10/05 6:30", "Name": "Rob"}]
dates = {}
for entry in d:
date = entry["Date"].split()[0]
if date in dates:
dates[date].append(entry["Name"])
else:
dates[date] = []
dates[date].append(entry["Name"])
print(dates["2020/10/03"])
print(dates["2020/10/05"])
是的,我知道我的代码片段没有直接提供您指定的输出。 我保持它的开放性,所以你可以根据你的特定需求定制它。
这是使用collections.Counter
和几个列表推导式的方法:
from collections import Counter
d = [{"Date": "2020/10/03 3:30", "Name": "John"}, {"Date": "2020/10/03 5:15", "Name": "Harry"}, {"Date": "2020/10/05 6:30", "Name": "Rob"}]
dates = Counter([obj['Date'].split()[0] for obj in d])
multiples = [val for val in dates.keys() if dates[val] > 1]
for obj in d:
if obj['Date'].split()[0] in multiples:
print(obj['Name'])
这将打印以下输出:
John
Harry
您可以提取日期,然后按它们排序和分组。
from datetime import datetime
from itertools import groupby
这是用于从字典中提取日期的辅助函数:
def dategetter(one_dict):
return datetime.strptime(one_dict['Date'],
"%Y/%m/%d %H:%M").date()
这是一个字典理解,将结果提取、排序、分组和组织成字典。 您可以以任何您想要的方式打印字典数据。
{date: [name['Name'] for name in names] for date,names
in groupby(sorted(d, key=dategetter), key=dategetter)}
#{datetime.date(2020, 10, 3): ['John', 'Harry'],
# datetime.date(2020, 10, 5): ['Rob']}
假设"Date"
格式一致,您可以使用简单的字典和列表推导式:
from collections import defaultdict
res = defaultdict(list)
for i in d:
dt = i["Date"].split()[0]
res[dt].append(i["Name"])
for date, names in res.items():
if len(names) > 1:
print(*names, sep="\n")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.