2016-08-18 2 views
0

У меня вопрос о том, как фильтровать словарь с помощью цикла.Фильтрация словаря с несколькими ключами и несколькими значениями на ключ

Вот пример словаря:

d = {'beta': ['ABC', '1', '5', '10', '15'], 
    'lambda': ['DEF', '3', '30', '22.2', '150'], 
    'omega': ['RST','15', '54.4', '150', '75'] 
} 

Как фильтровать словарь, чтобы удалить ключи, если третье значение в каждой клавиши < 100? Другими словами, после функции if в словаре следует оставить только омегу.
Я пробовал:

for k, v in d.iteritems(): 
    r = float((d[key][2])) 
    if r < float(100): 
     del d[k] 

Но это не сработало. Есть предположения? Новое для программирования python здесь.

Новый словарь должен просто оставить омега ключ, так как 150 больше 100.

+0

как следует список вывода выглядеть? – user1767754

+0

в идеале это было бы как d = {'lambda': 3, 30, 22.2, 150} – Deuce525

+0

третье значение, поэтому в основном потому, что третье значение выше 100, словарь должен содержать только ключ Omega, но поддерживать все значения ключа omega , Просто мой цикл должен удалить бета-версию и лямбда-ключи. – Deuce525

ответ

0
def cast_values(v): 
    try: 
     return float(v) 
    except ValueError: 
     return v 

new_d = {k:[ cast_values(i) for i in v ] for k,v in d.items() if float(v[3]) > 100} 

Результаты:

new_d = {'omega': ['RST', 15, 54.4, 150, 75]} 
+0

Jclarke, я думаю, что работает, но в моей реальной программе, где я пытался применить это, он дает мне синтаксическую ошибку, не могу преобразовать строку в float. Я думаю, что он обрабатывает значения в ключе как строки, а не значения. Любая идея о том, как это исправить? – Deuce525

+0

Если вы не передаете ключ по ошибке вместо значения, вы получите эту ошибку. Я протестировал код с предоставленной вами информацией и не получил эту проблему. Убедитесь, что вы передаете правильные значения в 'float()' часть кода. – JClarke

+0

'ValueError: не удалось преобразовать строку в float:' произойдет, если будет передано что-то вроде 'float ('word')', но будет корректно помещено 'float ('100')' – JClarke

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