2014-08-31 1 views
0

У меня есть словарь в python, имеющий кортеж как ключ и значение как int. Это выглядит следующим образом:Ключ Python tuple в словаре не может получить

{('class1','name1'):3,('class1','name2'):3,('class2','name1'):1,('class2','name2'):2} 

Я хочу, чтобы найти имя мудрое разницу значений от class1 к классу 2. Например:

{('class1','name1'):2,('class1','name2'):1} 

Можете ли вы мне помочь? Я новичок в python и не хочу перебирать список. Есть ли какой-нибудь питонический способ сделать это?

ответ

1

Вы должны использовать collections.Counter:

От https://docs.python.org/2/library/collections.html#collections.Counter

>>> c = Counter(a=4, b=2, c=0, d=-2) 
>>> d = Counter(a=1, b=2, c=3, d=4) 
>>> c.subtract(d) 
>>> c 
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6}) 

В вашем случае вы можете использовать что-то вроде этого

>>> d = {('class1','name1'):3,('class1','name2'):3,('class2','name1'):1,('class2','name2'):2} 
>>> dict1 = {k:v for k,v in d.items() if k[0] == "class1"} 
>>> dict2 = {k:v for k,v in d.items() if k[1] == "class2"} 
# in Python2.6 and earlier: dict([(k,v) for k,v in d.items() if blah]) 
>>> difference = dict(Counter(dict1) - Counter(dict2)) 
>>> difference 
{('class1', 'name2'): 1, ('class1', 'name1'): 2} 
+0

Но у меня нет двух отдельных словарей. У меня есть все мои записи только в одном словаре. Знаете ли вы, каким образом я могу создать такой словарь по моим данным данным? Как я могу сделать такой запрос в ключевом кортеже? – Naman

+0

Отлично, спасибо. Действительно элегантное решение. – Naman

Смежные вопросы