2014-08-31 54 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