繁体   English   中英

打印匹配键 Python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM