我有一個包含n個鍵值對的python字典,其中n-1個值相同,而1個不是。我需要找到獨特元素的關鍵。查找python字典中是否有不同的元素
例如:考慮python list [{a:1},{b:1},{c:2},{d:1}]
。我需要獲得'c'
作爲輸出。
我可以使用for循環來比較連續的元素,然後使用兩個for循環來比較這些元素與其他元素。但是有沒有一種更有效的方法去實現它,或者是一種我不知道的內置函數?
我有一個包含n個鍵值對的python字典,其中n-1個值相同,而1個不是。我需要找到獨特元素的關鍵。查找python字典中是否有不同的元素
例如:考慮python list [{a:1},{b:1},{c:2},{d:1}]
。我需要獲得'c'
作爲輸出。
我可以使用for循環來比較連續的元素,然後使用兩個for循環來比較這些元素與其他元素。但是有沒有一種更有效的方法去實現它,或者是一種我不知道的內置函數?
如果你有一本字典,你可以快速檢查並找到第一個值,這是不同的下一個值循環你的字典的鍵。
下面是一個例子:
def find_different(d):
k = d.keys()
for i in xrange(0, len(k)):
if d[k[i]] != d[k[(i+1)%len(k)]] and d[k[i]] != d[k[(i+2)%len(k)]]:
return k[i]
>>> mydict = {'a':1, 'b':1, 'c':2, 'd':1}
>>> find_different(mydict)
'c'
否則,如果您有什麼是單鍵詞典列表,那麼你就可以做到這一點很好地與函數映射列表該「提取」從價值觀你的元素,然後使用相同的邏輯檢查每個元素。
下面是另一個工作示例:
def find_different(l):
mask = map(lambda x: x[x.keys()[0]], l)
for i in xrange(0, len(l)):
if mask[i] != mask[(i+1)%len(l)] and mask[i] != mask[(i+2)%len(l)]:
return l[i].keys()[0]
>>> mylist = [{'a':1},{'b':1},{'c':2},{'d':1}]
>>> find_different(mylist)
'c'
注意:這些解決方案並不在Python 3工作作爲map
功能不返回list
而且也沒有字典的.keys()
方法。
如果你已經有你的字典,那麼你列出所有的鍵:key_list = yourDic.keys()
。使用該列表,您可以循環查看您的字典。如果你知道其中的一個值,這很容易,但在下面我假設你不知道。
yourDic = {'a':1, 'b':4, 'c':1, 'd':1, }
key_list = yourDic.keys()
previous_value = yourDic[key_list[0]] # Making it so loop gets past first test
count = 0
for key in key_list:
test_value = yourDic[key]
if (test_value != previous_value) and count == 1: # Checks first key
print key_list[count - 1]
break
elif (test_value != previous_value):
print key
break
else:
previous_value = test_value
count += 1
因此,一旦您找到不同的值,它將打印密鑰。如果你想要它打印的價值,你只需要一個print test_value
語句
這在很多層面上都是錯誤的:首先,OP沒有談論字典,而是談論字典列表;那麼你正在檢查每個項目的正確的兄弟,所以如果不同的元素是列表中的第一個,你的方法將無法正確識別它。 –
我複製並粘貼了前一個。它已經被修復了。哦,OP的例子有一個列表,但是特別詢問了「包含n個鍵值對的Python字典」,而且問題的標題特別提到了字典,所以這是我回答的問題 – dkhamrick
我必須承認,OP的示例具有誤導性... –
假設不能改變你的(實際上字典的名單,嘆息)「對錶」:
from collections import defaultdict
def get_pair(d):
return (d.keys()[0], d.values()[0])
def extract_unique(l):
d = defaultdict(list)
for key, value in map(get_pair, l):
d[value].append(key)
return filter(lambda (v,l): len(l) == 1, d.items())[0][1]
我能找到與此代碼稍加改進了答案。 http://stackoverflow.com/questions/1032281/python-finding-keys-with-unique-values-in-a-dictionary – TheFallenOne
如果n-1值相同,則只需要一個for循環。只要你看到兩個不同的值,你就知道它是哪一個。 –
@El'endiaStarman好點 - 雖然如果唯一一個是前兩個之一,你將不知道它是哪一個,直到你看到第三個元素。 –