2016-11-11 173 views
0
foob = {1:{'url':'www.abc.com', 'name':'abc'}, 2:{'url':'www.def.com', 'name':'def'}} 
item = {'url':'www.abc.com', 'name':'wrong name'} 

if item in foob.values(): 
    print 'yes' 
else: 
    print 'no' 

我想更改item in list.values(),以便它只比較url值而不是整個字典。是 有可能做到這一點,而無需遍歷整個字典 有一個簡單的方法來做到這一點,而無需編寫一個單獨的for循環?檢查字典字典中的值

+1

迭代是唯一的選擇,嘗試將其轉換成其他一些結構如列表等,那麼你實現你想要的結果,但仍然是一個複雜的過程。 –

+1

即使'在'迭代幕後名單...! – deceze

+1

是的,無論如何你需要迭代。 –

回答

2

使用any和發電機的表達:

if any(i['url'] == item['url'] for i in dict.values()): 
    print 'yes' 
else: 
    print 'no' 
+0

我不能使用任何somewhy,它在Eclipse中工作,但我爲Plex編寫一個插件,並且在那裏我得到了'NameError:全局名'any'沒有定義'並不知道爲什麼... – Valdas

+0

快速谷歌搜索修復這個:) http://stackoverflow.com/questions/9037821/python-nameerror-global-name-any-is-not-defined – Valdas

0

我認爲這段代碼可以工作,但我不認爲有一種方法可以避免某種迭代。

dict = {1:{'url':'www.abc.com', 'name':'abc'}, 2:{'url':'www.def.com', 'name':'def'}} 
item = {'url':'www.abc.com', 'name':'wrong name'} 

if item['url'] in [i['url'] for i in dict.values()]: 
    print 'yes' 
else: 
    print 'no' 

我同意deceze的代碼,使用任何

+0

這是非常浪費的做法。 – deceze

+0

@deceze請詳細說明 – Valdas

+0

@deceze你的意思是,除了這個事實,它重新定義了'dict'內置函數? –