2016-12-05 4 views
0

У меня есть список словарей и вы хотите найти соответствие для элемента этого списка (элемент является полным словарем). Не уверен, как это сделать в Python.сопоставить весь элемент в списке словарей python

Вот что мне нужно:

list_of_dict = [ {a : 2, b : 3, c : 5}, {a : 4, b : 5, c : 5}, {a : 3, b : 4, c : 4} ] 

dict_to_match = {a : 4, b : 5, c : 5} 

так с выше вводом dict_to_match должен соответствовать второму элементу в списке list_of_dict

Может кто-нибудь помочь с хорошим решением этой проблемы?

+2

'if dict_to_match in list_of_dict:' –

+0

Если вы просто хотите узнать, как сравнить 2 dicts: http://stackoverflow.com/questions/4527942/comparing-two-dictionaries-in-python – roymustang86

ответ

2

не так сильно отличается от сравнения целого числа или строки:

list_of_dict = [ {'a' : 2, 'b' : 3, 'c' : 5}, {'a' : 4, 'b' : 5, 'c' : 5}, {'a' : 3, 'b' : 4, 'c' : 4} ] 

dict_to_match = {'a' : 4, 'b' : 5, 'c' : 5} 

if dict_to_match in list_of_dict: 
    print("a match found at index", list_of_dict.index(dict_to_match)) 
else: 
    print("not match found") 

Patrick Haugh Предложил и ShadowRanger.

+1

Есть ли какая-то причина не использовать 'in'? –

+0

@PatrickHaugh Нет .. нет .. – Wentao

+0

@ShadowRanger обновлен. – Wentao

0

Использование цикла и оператора равна:

list_of_dict = [ {a : 2, b : 3, c : 5}, {a : 4, b : 5, c : 5}, {a : 3, b : 4, c : 4} ] 
dict_to_match = {a : 4, b : 5, c : 5} 
for i, d in enumerate(list_of_dict): 
    if d == dict_to_match: 
     print 'matching element at position %d' % i 
0
if dict_to_match in list_of_dict: 
    print "a match found" 
-1

< Python 3:

filter(lambda x: x == dict_to_match, list_of_dict)[0] 

Python 3:

list(filter(lambda x: x == dict_to_match, list_of_dict))[0] 
+1

Если вам нужна 'lambda' для использования' filter', не используйте 'filter'. Это будет медленнее, чем эквивалентное представление списка или генераторное выражение (и listcomp/genexpr будет иметь идентичную семантику как для Py2, так и для Py3), которая опускает 'lambda':' [d для d в list_of_dict, если d == dict_to_match] ' , Конечно, в этом случае вам нужен только один из них, и вам действительно не нужно его возвращать, поэтому это бесполезно. – ShadowRanger

0
list_of_dict = [ {'a' : 2, 'b' : 3, 'c' : 5}, {'a' : 4, 'b' : 5, 'c' : 5}, {'a' : 3, 'b' : 4, 'c' : 4} ] 

dict_to_match = {'a' : 4, 'b' : 5, 'c' : 5} 

for each in list_of_dict: 
    if each == dict_to_match: 
    print each, dict_to_match 

Я протестировал этот код, и он работает, я надеюсь, он вам поможет.

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