2016-04-06 3 views
-1

Мой запрос состоит в том, чтобы вытащить каждый элемент в списке по сравнению с ключом словаря и извлечь его значение.Сравнение списков и словаря в python

Код:

for each_element in list1: 
    for key,value in my_dictionary.items(): 
     if each_element == key: 
      output = value 

Ошибка Я облицовкой элемент из списка:

list element: ['a','b'] 
key from dictionary: 'a,b' 

, который не соответствует. Есть ли способ сделать это?

+1

Первый фрагмент не является действительным кодом Python ... И 'а, Ь == [ "а", "б"]' ложно, почему это должно совпадать? Строка никогда не может быть равна списку, почему это должно быть? 'a, b == ','. join (['a', 'b'])' может быть правдой, но поскольку вы сами не делаете это преобразование, почему Python должен угадать, что вы хотите? –

+0

@Rogalski, на самом деле это код python, но jus тестовый фрагмент и вы могли бы объяснить, что я делаю неправильно более ясно. –

+0

Я понятия не имею, почему вы используете цикл для поиска предметов в словаре. Возможно, обратитесь к [документации] (https://docs.python.org/3/tutorial/datastructures.html#dictionaries)? – nneonneo

ответ

-1

Предположим, что ваш список будучи [["a","b"],..] и словарь будучи {"a,b":val1,...}

out = (my_dict.get(",".join(item)) for item in my_list) 
# out := [val1, val2, None, None, val3..], None for non-existent keys 
# to weed out None vals 
out2 = (item for item in out if item) 
# and finally, consume the iterator 
output = list(out2) 
+0

@Signal Можете ли вы объяснить голос? –

1

дают попробовать, за исключением выстрела и обхода любых рассогласований без генерации ошибки. Используйте функцию поиска словарей - myDictionary [KeyToSearchFor] выдает значение, если оно есть.

L = ['a','b','c','d','e','f'] 
D = {'a':10,'b':20,'c':30,'d':40,'z':50,'f':60, 'g':70} 

for i in L: 
    try: 
     print("key: {}/value: {}".format(i,D[i])) 
    except KeyError: 
     continue 

выход, не заметить ни одного совпадения на 'е'

key: a/value: 10 
key: b/value: 20 
key: c/value: 30 
key: d/value: 40 
key: f/value: 60 
+0

Примечание. Обычно не рекомендуется иметь общий оператор 'except', поскольку он может маскировать другие проблемы в коде. – MANA624

+0

Я согласен, но вы, безусловно, можете расширить его, чтобы он не маскировал другие проблемы. Но да ... ты на 100% прав сэр – bvmcode

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