python - 如何从列表中获取字典中的数据并以字典形式存储回来?
问题描述
这是字典形式
abc = {
'if1': {'name': 'data', 'date': '80980'},
'if2': {'name': 'data_1', 'date': '9886878'},
'if3': {'name': 'data', 'date': '0987667'},
'if4': {'name': 'data__5', 'date': '0987667'},
'if5': {'date': '0987667'}
}
当我以列表形式提供输入过滤器时,我正在尝试使用名称应用过滤器
list_item = ['data','data_1']
它应该给我输出日期如下
{
data:['80980', '0987667'],
data_1:['9886878']
}
请帮我解决这个问题。
解决方案
这个字典太复杂了,你不能只过滤它,你必须把它转换成更有用的东西。
abc= { 'if1':{'name':'data','date':'80980'}, 'if2':{'name':'data_1','date':'9886878'}, 'if3':{'name':'data','date':'0987667'}, 'if4':{'name':'data__5','date':'0987667'}}
[字典编错了,我以为第二个if4
是错字,我在复制文本时将其删除。]
首先,让我们通过删除内部字典来展平它,使date
我们的字典值:
formatted1 = {(key, subdict['name']): subdict['date'] for key, subdict in abc.items() if 'name' in subdict}
我将原始密钥保留为新密钥的一部分,否则我们会覆盖我们的data
条目。
我们的新字典看起来像这样:
{('if1', 'data'): '80980', ('if2', 'data_1'): '9886878', ('if3', 'data'): '0987667', ('if4', 'data__5'): '0987667'}
现在它更容易使用。让我们做一个简单的循环来进一步格式化它:
formatted2 = {}
for (_, key), value in formatted1.items(): # we'll be skipping first part of the key, hence I didn't give it a meaningful name
elem = formatted2.get(key, [])
elem.append(value)
formatted2[key] = elem
我们更新的 dict 现在看起来像这样:
{'data': ['80980', '0987667'], 'data_1': ['9886878'], 'data__5': ['0987667']}
现在它终于以我们可以轻松过滤的形式出现了!
list_item = ['data','data_1']
result = {k: formatted2[k] for k in formatted2 if k in list_item}
结果:
{'data': ['80980', '0987667'], 'data_1': ['9886878']}
推荐阅读
- java - 为什么它不被视为多重继承,而所有类都先从 Object 类扩展,然后再扩展其他类
- java - 如何在没有中断的情况下停止while循环并在java中退出
- julia - Julia:彩条的牛虻大小
- java - 设置 bean 属性时找不到具有逻辑名称的列
- discord.js - 为什么这个机器人在“user.hasPermission()”上失败了?
- python - 在管理页面上添加表时 Django 出错
- excel - 合并来自已关闭工作簿的数据 adodb 方法
- unity3d - Sing app bundle with lost keystore 如何更新?
- scala - 如何在 Scala 中分解我自己的序列 ADT?
- python - RepeatVector 层与 Concatenate 层相同吗?