首页 > 解决方案 > 如何从列表中获取字典中的数据并以字典形式存储回来?

问题描述

这是字典形式

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']
}

请帮我解决这个问题。

标签: pythonpython-3.xlistdictionary

解决方案


这个字典太复杂了,你不能只过滤它,你必须把它转换成更有用的东西。

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']}

推荐阅读