首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据一个键的值过滤所有字典

根据一个键的值过滤所有字典
EN

Stack Overflow用户
提问于 2020-01-10 13:50:32
回答 2查看 38关注 0票数 0

我有个白痴:

代码语言:javascript
运行
复制
d1 = {"date":["2019-11","2019-11","2019-12","2019-12","2020-01","2020-01"],
      "shares":[28,16,5,10,1,1],
      "target":["INSTAGRAM","TEXT","INSTAGRAM","TEXT","INSTAGRAM","TEXT"]
     }

我希望只为target = INSTAGRAM过滤所有的target = INSTAGRAM字典,而不使用pandas。这就是预期的结果:

代码语言:javascript
运行
复制
{"date":["2019-11","2019-12","2020-01"],
 "shares":[28,5,1],
 "target":["INSTAGRAM","INSTAGRAM","INSTAGRAM"]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-10 14:00:08

使用defaultdict

代码语言:javascript
运行
复制
from collections import defaultdict
d = defaultdict(list)
for i, target in enumerate(d1['target']):
    if target == 'INSTAGRAM':
        for k,v in d1.items():
            d[k].append(v[i])

代码语言:javascript
运行
复制
print(d)
defaultdict(list,
            {'date': ['2019-11', '2019-12', '2020-01'],
             'shares': [28, 5, 1],
             'target': ['INSTAGRAM', 'INSTAGRAM', 'INSTAGRAM']})

如果您想避免任何导入并使用python的dict类:

代码语言:javascript
运行
复制
d = dict()
for i, target in enumerate(d1['target']):
    if target == 'INSTAGRAM':
        for k,v in d1.items():
            if k in d.keys():
                d[k].append(v[i])
            else:
                d[k] = [v[i]]
票数 2
EN

Stack Overflow用户

发布于 2020-01-10 14:07:53

这应该能起作用:

代码语言:javascript
运行
复制
def filter_by_key(key, value, _dict):
    """ Filter a dictionary by it's key value

    :param str key: Dictionary key to inspect
    :param str value: Value to look for inside the dictionary key
    :param dict _dict: Dictionary to inspect
    :return: Dictionary with filter applied
    """

    indexes = [index for index, item in enumerate(_dict[key])
               if _dict[key][index] == value]

    result_dict = {}
    for key, value in a.iteritems():
        result_dict[key] = [_dict[key][index] for index in indexes]
    return result_dict
代码语言:javascript
运行
复制
a = {"date":["2019-11","2019-11","2019-12","2019-12","2020-01","2020-01"],
      "shares":[28,16,5,10,1,1],
      "target":["INSTAGRAM","TEXT","INSTAGRAM","TEXT","INSTAGRAM","TEXT"]
     }


result = filter_by_key('target', 'INSTAGRAM', a)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59683034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档