эффективное сравнение значений словаря с элементами списка

#python

#python

Вопрос:

У меня есть словарь, который мне нужен для сравнения его значений после итерации со списком.

это мой код:

 mdic = json.loads(data)
mylist = ['blue', 'green', 'red', 'black']
if not mdic['color_detail']:
   raise ValueError('No color_detail available')

color_registered = False
for e in mylist:
    if dic['color_detail'] == e:
           color_registered = True
if not color_registered:
   raise ValueError('Color not registered')
 

Есть ли лучший способ написать мой код? (Я имею в виду способ пропустить флаги False / True)

Комментарии:

1. Это выглядит нормально

2. Вы могли бы добавить break заявление после color_registered = True

3. color_registered = dic['color_detail'] in mylist ?

4. @SayandipDutta Спасибо 🙏

Ответ №1:

Вы можете использовать встроенную any функцию:

 color_registered = any(e == dic['color_detail'] for e in mylist)
 

Комментарии:

1. Неплохо. Спасибо. Я совсем забыл any , как ты думаешь, это не медленно, потому что оно не встроено?

2. @ElisaFo Это встроенная функция, и она, безусловно, быстрее, чем ваш цикл, потому что она вызывает короткое замыкание (например, если вы использовали a break внутри цикла).

Ответ №2:

Второй блок должен быть именно таким:

 if dic['color_detail'] not in mylist:
   raise ValueError('Color not registered')
 

И первая проверка могла бы лучше также охватывать несуществование, mdic а не предполагать, что оно всегда есть:

 if not mdic.get('color_detail'):
   raise ValueError('No color_detail available')
 

Ответ №3:

вы хотите зациклить значения dict, например:

 for i,j in dict.items():
    if j in list:
        #your logic
    else:
        #your logic
 

Ответ №4:

Зачем использовать список, когда можно использовать набор?

 mdic = json.loads(data)

myset = {'blue', 'green', 'red', 'black'}

if mdic['color_detail'] in myset:
    print('good selection')
else:
    print('bad selection')
 

вы можете использовать ключевое in слово с любой последовательностью, например, списками, кортежами, строками, наборами. преимущество наборов заключается в том, что выполняется один поиск, тогда как в списке каждый элемент проверяется по очереди, пока элемент не будет найден. В худшем случае элемент находится в конце списка, а для длинных списков это суммируется.