2014-08-31 41 views
0

我有一个Python中的元组,其元组的键值为int。它看起来像:Python中的元组键在字典中无法取得

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

我想找到的Class1值的名称明智差2级。如:

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

你能帮帮我吗?我是新的python,不想遍历列表。有没有pythonic的方式来做到这一点?

回答

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 2014-09-01 00:13:59

+0

太好了,谢谢。真正优雅的解决方案。 – Naman 2014-09-01 00:22:22