使用python中的元组键从字典中获取项目

时间:2019-02-26 18:10:05

标签: python dictionary tuples

我有一个带元组键的字典,如下所示

{('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']

3 个答案:

答案 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())]

这会将您的键分组在具有相同前两个元素的列表中。