我有一个带元组键的字典,如下所示
{('age', 'Low', 'Pos') : 3 ,
('age', 'High', 'Pos') : 11 ,
('age', 'Low', 'Neg') : 8 ,
('age', 'High', 'Neg') : 8 ,
('sex', 'male', 'Pos') : 13 ,
('sex', 'female', 'Pos') : 1 ,
('sex', 'male', 'Neg') : 10 ,
('sex', 'female', 'Neg') : 6}
现在我要获取索引0,1相同的键
例如:
('sex', 'female', 'Pos') , ('sex', 'female', 'Neg')
or
('age', 'Low', 'Pos') , ('age', 'Low', 'Neg')
如何在python中做到这一点?
这是我目前拥有的:
x = [i for i in d.keys() if i[0]=='age' and i[1]=='Low']
答案 0 :(得分:2)
对于您要执行的操作类型,我认为这不是最好的数据结构(我认为嵌套字典更有意义)。尽管如此,假设您有充分的理由以这种方式存储它,一个解决方案是在索引0和1上这样使用10.4.145.182:8000
:
groupby
答案 1 :(得分:1)
您可以对键进行切片以获得前两个索引,并使用defaultdict来收集它们:
from collections import defaultdict
data = {
('age', 'Low', 'Pos') : 3 ,
('age', 'High', 'Pos') : 11 ,
('age', 'Low', 'Neg') : 8 ,
('age', 'High', 'Neg') : 8 ,
('sex', 'male', 'Pos') : 13 ,
('sex', 'female', 'Pos') : 1 ,
('sex', 'male', 'Neg') : 10 ,
('sex', 'female', 'Neg') : 6
}
prefix2 = defaultdict(list)
for tuple_key in data:
prefix2[tuple_key[:2]].append(tuple_key)
# jump through some hoops to get pretty output
import pprint
print pprint.pprint(dict(prefix2)) # converts back to regular dict since pprint likes them better
上面的输出是:
{('age', 'High'): [('age', 'High', 'Neg'), ('age', 'High', 'Pos')],
('age', 'Low'): [('age', 'Low', 'Pos'), ('age', 'Low', 'Neg')],
('sex', 'female'): [('sex', 'female', 'Pos'), ('sex', 'female', 'Neg')],
('sex', 'male'): [('sex', 'male', 'Pos'), ('sex', 'male', 'Neg')]}
答案 2 :(得分:0)
一种简单的方法:
x = [[k for k in d.keys() if k[:2] == s] for s in set(k[:2] for k in d.keys())]
这会将您的键分组在具有相同前两个元素的列表中。