如何仅根据元组键的部分匹配条件提取Python字典的对应值
注意你给出的示例字典存在重复的二元组键,Python字典要求键唯一,重复键会直接覆盖之前的赋值,要得到你预期的
[2, 4, 6]输出,需要先修正重复键问题,有效字典结构参考如下:d = { (1, 'first'): [1], (1, 'second'): [2], (2, 'second'): [4], (2, 'first'): [5], (3, 'second'): [6] }
原生Python最简实现
Python本身没有内置类似pandas .loc的索引语法,用列表推导式一行就能完成筛选,写法非常简洁:
res = [v[0] for k, v in d.items() if 'second' in k]
运行后res的值就是你需要的[2, 4, 6]。如果你的字典值不一定是单元素列表,去掉代码里的[0]即可保留原列表结构。
封装类loc的通用筛选方法
如果你需要频繁做这类键筛选,可以封装一个简单的辅助函数,用法和.loc非常接近:
def dict_loc(d, filter_func): return [v[0] for k, v in d.items() if filter_func(k)] # 调用时直接传入筛选条件即可 res = dict_loc(d, lambda key: 'second' in key)
直接用pandas .loc实现
如果你习惯了pandas的用法,可以把字典转成MultiIndex的Series,直接用原生的.loc筛选:
import pandas as pd # 构造MultiIndex Series s = pd.Series([v[0] for v in d.values()], index=pd.MultiIndex.from_tuples(d.keys())) # 用loc筛选二级索引为second的所有值 res = s.loc[:, "second"].tolist()
内容的提问来源于stack exchange,提问作者Jerzy
相关产品推荐
相关产品推荐

