有两个字典列表:
types- 包含有关体育部分名称和一位访问者访问日期的信息。user_list- 包含有关也去过这个健身房的人的信息以及他们的访问日期。types = [{'type':'tango', 'date':'200118'}, {'type':'box', 'date':'110217'}, {'type':'strip', 'date':'170518'}] user_list = [{'name':'maxim', 'date':'200118'}, {'name':'ivan', 'date':'110217'}, {'name':'elena', 'date':'051018'}, {'name':'gleb', 'date':'170518'}, {'name':'magas', 'date':'110217'}, {'name':'ivan', 'date':'170518'}, {'name':'maxim', 'date':'110217'}]
一个任务
有必要从第二个列表中选择与第一个列表中指定的日期相同的访问者。还有一个条件:他们不止一次在同一个日期。
结果
最终结果应该是这样的列表:
[{'date': '110217', 'name': 'ivan'}, {'date': '170518', 'name': 'ivan'}, {'date': '200118', 'name': 'maxim'}, {'date': '110217', 'name': ‘maxim'}]
如果解释不同,则需要从第二个列表中选择存在于第一个列表中且在第二个列表中多次出现的“日期”字段的值的行。以下是我的解决方案,我真的不喜欢。部分代码可以用生成器替换,但也许有人知道更优化的工具?
types = [ {'type':'tango', 'date':'200118'},
{'type':'box', 'date':'110217'},
{'type':'strip', 'date':'170518'}]
user_list = [{'name':'maxim', 'date':'200118'},
{'name':'ivan', 'date':'110217'},
{'name':'elena', 'date':'051018'},
{'name':'gleb', 'date':'170518'},
{'name':'magas', 'date':'110217'},
{'name':'ivan', 'date':'170518'},
{'name':'maxim', 'date':'110217'}]
dates = [dct['date'] for dct in types]
names = list(set([dct['name'] for dct in user_list]))
goodusers = []
for name in names:
res = []
for u in user_list:
if u['name']==name and u['date'] in dates:
res.append(u)
if len(res)>1:
goodusers += res
print(goodusers)
你开始是对的。只有单独提取名称是没有意义的。
使用Pandas模块解决此类问题很方便:
首先,让我们从字典列表中创建 DataFrame:
有踪迹。数据框的:
现在可以用一个命令过滤它们:
结果:
与字典列表相同:
那么在这里,感谢问题的作者和他的客人:
分发: