Как проверить, присутствуют ли элементы списка в импортируемом файле

#python #emoji

Вопрос:

У меня есть 2 файла python, 1-й-основной файл и 2-й, где у меня есть все смайлики в Юникоде с их именами (которые хранятся в переменной). В 1-м файле у меня есть список имен смайликов, теперь я хочу проверить, совпадают ли эти имена с тем же Юникодом этого смайлика.

Это то, что я делаю в главном файле:

 import emoji_file

my_list =  ["grinning_face", "rolling_on_the_floor_laughing", "winking_face"]

# checking if in the my_list.. "grinning_face", "rolling_on_the_floor_laughing" and "winking_face"  is present in emoji_file.

for i in range(len(my_list)):
   if my_list[i] == emoji_file.my_list[i]:
          print("Present {emoji_file.my_list[i]}")
   else:
           print("Not present")
 

Это мой второй файл, emoji_file, который я импортирую в основной файл:

 GRINNING_FACE = "U0001f600"
STAR_STRUCK = "U0001f929"
SLEEPY_FACE = "U0001f62a"
ANGUISHED_FACE = "U0001f627"
WINKING_FACE = "U0001f609"
 

выход

 if my_list[i] == emoji_file.my_list[i]:
AttributeError: module 'emoji_file' has no attribute 'my_list'
 

Ответ №1:

Вы можете использовать __dict__ и in для его достижения.

код:

 import emoji_file
my_list =  ["grinning_face", "rolling_on_the_floor_laughing", "winking_face"]
for i in range(len(my_list)):
    if my_list[i].upper() in emoji_file.__dict__:
        print(f"Present {emoji_file.__dict__[my_list[i].upper()]}")
    else:
        print("Not present")
 

Результат:

 Present �😀
Not present
Present �😉
 

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

1. Я ценю это, но могу ли я знать, почему мне нужно использовать эту .upper() функцию?

2. @Oliviero Тоскани, потому что вы определяете переменные как все символы верхнего регистра в emoji_file.

Ответ №2:

 import emoji_file
# get dict of the module, then extract those items that don’t start with __
names = [item for item in dir(emoji_file) if not item.startswith("__")]

my_list =  ["grinning_face", "rolling_on_the_floor_laughing", "winking_face"]

# checking if in the my_list.. "grinning_face", "rolling_on_the_floor_laughing" and "winking_face"  is present in emoji_file.

for i in range(len(my_list)):
   # checks if the uppercase version of the item in my_list at index i is in names
   if my_list[i].upper() in names:
          print(f"Present {my_list[i]}")
   else:
           print("Not present")
 

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

1. Пожалуйста, объясните, что вы сделали и почему это работает

2. Добавил несколько комментариев