Выражение 'C' or 'D'
превращается в «C», поэтому то, что вы написали, эквивалентно поиску только «C». Вы просто должны разделить свой тест в двух выражениях. Также использование in
будет более идиоматичным, чем использование __contains__
{x: Mydict[x] for x in Mydict.keys() if 'C' in x or 'D' in x}
Если вы хотите применить тест к каждому ключу в списке, например, проверьте, что он меньше, чем «D08», просто сделайте это и используйте лексикографический порядок.
NewDict= {x: Mydict[x] for x in Mydict.keys() if x < 'D08'}
Для сравнения интервалов Python предоставляет ярлык, позволяющий избежать написания двух выражений, и вы можете написать прямо:
NewDict= {x: Mydict[x] for x in Mydict.keys() if 'C01' < x < 'D08'}
Используйте включающий <=
или исключительный <
оператор сравнения в зависимости от того, что вы хотите.
Для более сложных условий на ключах, вероятно, яснее использовать явную функцию, такую как:
def condition(key):
return 'C01' < key < 'D08'
NewDict= {x: Mydict[x] for x in Mydict.keys() if condition(x)}
С таким форматом вы можете сделать тест на ключе настолько сложным, насколько захотите, и результат останется легко читаемым.
Было бы идиоматичнее и короче использовать items()
для итерации как по ключам, так и по значениям, таким как:
NewDict= {k: v for k,v in Mydict.items() if 'C01' < k < 'D08'}
В качестве последнего слова переменные падежа Camel обычно зарезервированы для классов в python. Для переменных общепринятым условием было бы использовать случай змеи, например new_dict
.