Передать имена в список и использовать "содержит" для каждого
У меня есть датафрейм, который называется один из его столбцов proj
есть предложение в каждой строке, и в этом предложении упоминается название города. Я хочу сделать if
при условии, что при передаче пароля будут доступны данные другого города.
proj
sd_32 New York
eo_31 Lisbon
..
Ex.
x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
while True:
passw = input('Password').upper()
if not passw in ('A','B'):
print('Try again')
continue
else:
break
if passw == 'A':
df = x[x['proj'].str.contains('New York')]
print(df)
elif passw == 'B':
df = x[x['proj'].str.contains('Lisbon')]
print(df)
Как сделать это более питонским способом?
Я думал о создании списка:
city = ['New York','Lisbon','Berlin',..] #unique names of cities
а затем передать это в коде, который для каждого отдельного города, в зависимости от пароля делает if
процесс, как я сделал, но с этой идеей. Как я могу продолжить это?
2 ответа
Возможно, используйте dict с паролями в качестве ключа и названиями городов в качестве значений: cities = {'A': 'New York', 'B': 'Lisbon', ...}
, Надо признать, что вам все еще нужно проверить действительные ключи, но это происходит в цикле выше, когда вы запрашиваете ввод пароля (используя клавиши dict):
cities = {'A': 'New York', 'B': 'Lisbon'}
x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
while True:
passw = input('Password').upper()
if passw not in cities: # `in cities` same as `in cities.keys()`
print('Try again')
continue
else:
break
df = x[x['proj'].str.contains(cities[passw])]
print(df)
Вы можете использовать dict
в твоем случае
Пример:
d = {"A": 'New York', "B": 'Lisbon'}
if passw in d:
df = x[x['proj'].str.contains(d[passw])]