Skip to content

Instantly share code, notes, and snippets.

@asehmi
Last active March 30, 2023 11:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asehmi/e16897583de875c777ec79f42bbb68d3 to your computer and use it in GitHub Desktop.
Save asehmi/e16897583de875c777ec79f42bbb68d3 to your computer and use it in GitHub Desktop.
Streamlit app showing selection boxes with cascading (dependent) options
import json
import streamlit as st
import pandas as pd
st.set_page_config(
page_title='Cascade Selection',
layout='centered',
page_icon='🌴'
)
BASE_PATH = "."
@st.cache(persist=True, allow_output_mutation=True)
def load_locations():
with open(f'{BASE_PATH}/z-global-locations.json', 'rt', encoding='utf8') as f:
locations_str = f.read()
locations_json = json.loads(locations_str)
return (locations_json)
locations = load_locations()
c1, _, c3 = st.columns([3,1,4])
with c1:
st.subheader('Locations data')
st.json(locations, expanded=False)
with c3:
st.subheader('Cascade selections')
region = st.selectbox('Select region', options=locations.keys())
country = st.selectbox('Select country', options=locations[region].keys())
cities = st.selectbox('Select city', options=locations[region][country])
{
"Africa": {
"Algeria": [
"Algiers",
"Constantine",
"Oran"
],
"Angola": [
"Huambo",
"Luanda"
],
"Benin": [
"Cotonou"
],
"Botswana": [
"Gaborone"
],
"Burkina Faso": [
"Ouagadougou"
],
"Burundi": [
"Bujumbura"
],
"Cameroon": [
"Douala",
"Yaound\u00e9"
],
"Cape Verde": [
"Praia"
],
"Central African Republic": [
"Bangui"
],
"Chad": [
"N'Djamena"
],
"Congo": [
"Brazzaville",
"Pointe-Noire"
],
"C\u00f4te d'Ivoire": [
"Abidjan",
"Yamoussoukro"
],
"Democratic Republic of Congo": [
"Kinshasa"
],
"Djibouti": [
"Djibouti City"
],
"Egypt": [
"Alexandria",
"Cairo",
"El-Mansoura",
"Luxor",
"Mahalla el-Kubra",
"Port Said",
"Suez"
],
"Equatorial Guinea": [
"Malabo"
],
"Eritrea": [
"Asmara"
],
"Eswatini": [
"Mbabane"
],
"Ethiopia": [
"Addis Ababa"
],
"Gabon": [
"Libreville"
],
"Gambia": [
"Banjul"
],
"Ghana": [
"Accra",
"Kumasi"
],
"Guinea": [
"Conakry"
],
"Guinea-Bissau": [
"Bissau"
],
"Kenya": [
"Mombasa",
"Nairobi"
],
"Lesotho": [
"Maseru"
],
"Liberia": [
"Monrovia"
],
"Libya": [
"Tripoli"
],
"Madagascar": [
"Antananarivo"
],
"Malawi": [
"Blantyre City",
"Lilongwe"
],
"Mali": [
"Bamako"
],
"Mauritania": [
"Nouakchott"
],
"Mauritius": [
"Port Louis"
],
"Morocco": [
"Agadir",
"Casablanca",
"Fes",
"Marrakech",
"Meknes",
"Rabat",
"Tangier"
],
"Mozambique": [
"Beira",
"Maputo"
],
"Namibia": [
"Windhoek"
],
"Niger": [
"Niamey"
],
"Nigeria": [
"Aba",
"Abeokuta",
"Abuja",
"Benin City",
"Enugu",
"Ibadan",
"Ilorin",
"Jos",
"Kaduna",
"Kano",
"Lagos",
"Maiduguri",
"Ogbomosho",
"Onitsha",
"Port Harcourt",
"Zaria"
],
"Rwanda": [
"Kigali"
],
"Senegal": [
"Dakar"
],
"Sierra Leone": [
"Freetown"
],
"South Africa": [
"Bloemfontein",
"Buffalo City",
"Cape Town",
"Durban",
"Johannesburg",
"Kimberley",
"Polokwane",
"Port Elizabeth",
"Pretoria"
],
"Sudan": [
"Khartoum"
],
"Tanzania": [
"Arusha",
"Dar Es Salaam",
"Dodoma",
"Mwanza"
],
"Togo": [
"Lom\u00e9"
],
"Tunisia": [
"Sfax",
"Sousse",
"Tunis"
],
"Uganda": [
"Kampala"
],
"Zambia": [
"Kitwe",
"Lusaka",
"Ndola"
],
"Zimbabwe": [
"Bulawayo",
"Harare"
]
},
"Americas": {
"Argentina": [
"Buenos Aires",
"C\u00f3rdoba",
"La Plata",
"Mendoza",
"Rosario",
"Salta",
"San Miguel De Tucum\u00e1n"
],
"Bahamas": [
"Nassau"
],
"Barbados": [
"Bridgetown"
],
"Bolivia": [
"Cochabamba",
"La Paz",
"Santa Cruz"
],
"Brazil": [
"Aracaju",
"Baixada Santista",
"Belo Horizonte",
"Bel\u00e9m",
"Bras\u00edlia",
"Campo Grande",
"Cuiab\u00e1",
"Curitiba",
"Florian\u00f3polis",
"Fortaleza",
"Goi\u00e2nia",
"Grande S\u00e3o Lu\u00eds",
"Joinville",
"Jo\u00e3o Pessoa",
"Macei\u00f3",
"Manaus",
"Natal",
"Porto Alegre",
"Recife",
"Ribeirao Pr\u00eato",
"Rio de Janeiro",
"Salvador",
"Sao Jos\u00e9 dos Campos",
"Sorocaba",
"S\u00e3o Paulo",
"Teresina"
],
"Canada": [
"Calgary",
"Edmonton",
"Halifax",
"Hamilton",
"Montr\u00e9al",
"Ottawa-Gatineau",
"Quebec City",
"Toronto",
"Vancouver",
"Winnipeg"
],
"Chile": [
"Concepci\u00f3n",
"Santiago",
"Valpara\u00edso"
],
"Colombia": [
"Barranquilla",
"Bogot\u00e1",
"Bucaramanga",
"Cali",
"Cartagena",
"C\u00facuta",
"Ibagu\u00e9",
"Medell\u00edn"
],
"Costa Rica": [
"San Jos\u00e9 (Costa Rica)"
],
"Cuba": [
"Havana"
],
"Dominican Republic": [
"Santo Domingo"
],
"Ecuador": [
"Guayaquil",
"Quito"
],
"El Salvador": [
"San Salvador"
],
"Guatemala": [
"Guatemala City"
],
"Guyana": [
"Georgetown (Guyana)"
],
"Haiti": [
"Port-Au-Prince"
],
"Honduras": [
"Tegucigalpa"
],
"Jamaica": [
"Kingston"
],
"Mexico": [
"Acapulco",
"Aguascalientes",
"Canc\u00fan",
"Chihuahua",
"Cuernavaca",
"Culiac\u00e1n",
"Guadalajara",
"Hermosillo",
"Ju\u00e1rez",
"Le\u00f3n",
"Matamoros",
"Mexicali",
"Mexico City",
"Monterrey",
"Morelia",
"M\u00e9rida",
"Oaxaca",
"Puebla",
"Quer\u00e9taro",
"Reynosa",
"Saltillo",
"San Luis Potos\u00ed",
"Tampico",
"Tijuana",
"Toluca",
"Tuxtla Guti\u00e9rrez",
"Veracruz",
"Xalapa"
],
"Nicaragua": [
"Managua"
],
"Panama": [
"Panama City"
],
"Paraguay": [
"Asunci\u00f3n"
],
"Peru": [
"Arequipa",
"Chiclayo",
"Lima",
"Trujillo"
],
"Puerto Rico": [
"San Juan"
],
"Suriname": [
"Paramaribo"
],
"United States": [
"Akron",
"Albany",
"Albuquerque",
"Allentown",
"Atlanta",
"Austin",
"Bakersfield",
"Baltimore",
"Baton Rouge",
"Birmingham (US)",
"Boise City",
"Boston",
"Bridgeport",
"Buffalo",
"Charleston",
"Charlotte",
"Chicago",
"Cincinnati",
"Cleveland",
"Colorado Springs",
"Columbia",
"Columbus",
"Dallas",
"Dayton",
"Denver",
"Des Moines",
"Detroit",
"Durham",
"El Paso",
"Fort Myers",
"Fresno",
"Grand Rapids",
"Greensboro",
"Greenville",
"Harrisburg",
"Hartford",
"Honolulu",
"Houston",
"Indianapolis",
"Jacksonville",
"Kansas City",
"Knoxville",
"Las Vegas",
"Little Rock",
"Los Angeles",
"Louisville",
"Madison",
"Memphis",
"Miami",
"Milwaukee",
"Minneapolis",
"Nashville",
"New Haven",
"New Orleans",
"New York",
"North Port",
"Oklahoma City",
"Omaha",
"Orlando",
"Oxnard",
"Philadelphia",
"Phoenix",
"Pittsburgh",
"Portland",
"Providence",
"Raleigh",
"Richmond",
"Riverside",
"Rochester",
"Sacramento",
"Salt Lake City",
"San Antonio",
"San Diego",
"San Francisco",
"San Jose (US)",
"Seattle",
"St. Louis",
"Stockton",
"Syracuse",
"Tampa",
"Toledo",
"Tucson",
"Tulsa",
"Virginia Beach",
"Washington, DC",
"Wichita",
"Winston-Salem",
"Worcester"
],
"Uruguay": [
"Montevideo"
],
"Venezuela": [
"Barquisimeto",
"Caracas",
"Guayana City",
"Maracaibo",
"Maracay",
"Valencia (Venezuela)"
]
},
"Asia": {
"Afghanistan": [
"Kabul"
],
"Azerbaijan": [
"Baku"
],
"Bangladesh": [
"Chittagong",
"Dhaka",
"Khulna",
"Rajshahi"
],
"Cambodia": [
"Phnom Penh"
],
"China": [
"Anqing",
"Anshan",
"Anyang",
"Baoding",
"Baoji",
"Baotou",
"Beijing",
"Binzhou",
"Bozhou",
"Cangzhou",
"Changchun",
"Changde",
"Changsha",
"Changzhou",
"Chengdu",
"Chenzhou",
"Chifeng",
"Chongqing",
"Dalian",
"Daqing",
"Datong",
"Dazhou",
"Deyang",
"Dezhou",
"Dongguan",
"Dongying",
"Foshan",
"Fushun",
"Fuyang",
"Fuzhou",
"Ganzhou",
"Guangzhou",
"Guigang",
"Guilin",
"Guiyang",
"Haikou",
"Handan",
"Hangzhou",
"Harbin",
"Hefei",
"Hengshui",
"Hengyang",
"Heze",
"Hohhot",
"Huaian",
"Huaihua",
"Huainan",
"Huanggang",
"Huangshi",
"Huizhou",
"Huzhou",
"Jiangmen",
"Jiaozuo",
"Jiaxing",
"Jilin",
"Jinan",
"Jingzhou",
"Jinhua",
"Jining",
"Jiujiang",
"Kaifeng",
"Kunming",
"Langfang",
"Lanzhou",
"Lianyungang",
"Liaocheng",
"Linfen",
"Linyi",
"Liuan",
"Liuzhou",
"Luoyang",
"Maanshan",
"Maoming",
"Mianyang",
"Nanchang",
"Nanchong",
"Nanjing",
"Nanning",
"Nantong",
"Nanyang",
"Ningbo",
"Pingdingshan",
"Putian",
"Puyang",
"Qingdao",
"Qingyuan",
"Qinhuangdao",
"Qiqihar",
"Quanzhou",
"Qujing",
"Rizhao",
"Shanghai",
"Shangqiu",
"Shangrao",
"Shantou",
"Shaoyang",
"Shenyang",
"Shenzhen",
"Shijiazhuang",
"Suqian",
"Suzhou (Anhui)",
"Suzhou (Jiangsu)",
"Taian",
"Taiyuan",
"Taizhou (Jiangsu)",
"Taizhou (Zhejiang)",
"Tangshan",
"Tianjin",
"Urumqi",
"Weifang",
"Weihai",
"Weinan",
"Wenzhou",
"Wuhan",
"Wuhu",
"Xiamen",
"Xian",
"Xiangfan",
"Xianyang",
"Xiaogan",
"Xingtai",
"Xinxiang",
"Xinyang",
"Xuchang",
"Xuzhou",
"Yancheng",
"Yangzhou",
"Yantai",
"Yibin",
"Yichang",
"Yichun",
"Yinchuan",
"Yueyang",
"Yulin",
"Yuncheng",
"Zaozhuang",
"Zhangjiakou",
"Zhangzhou",
"Zhanjiang",
"Zhaoqing",
"Zhaotong",
"Zhengzhou",
"Zhenjiang",
"Zhongshan",
"Zhoukou",
"Zhuhai",
"Zhumadian",
"Zhuzhou",
"Zibo",
"Zunyi"
],
"Hong Kong, China": [
"Hong Kong (City)"
],
"India": [
"Agra",
"Ahmedabad",
"Aligarh",
"Amravati",
"Amritsar",
"Asansol",
"Aurangabad",
"Bareilly",
"Belgaum",
"Bengaluru",
"Bhavnagar",
"Bhilai Nagar",
"Bhopal",
"Bhubaneswar",
"Bikaner",
"Bokaro",
"Chandigarh",
"Chennai",
"Coimbatore",
"Cuttack",
"Delhi",
"Dhanbad",
"Faizabad",
"Gorakhpur",
"Guntur",
"Guwahati",
"Gwalior",
"Hubli-Dharwad",
"Hyderabad (India)",
"Indore",
"Jabalpur",
"Jaipur",
"Jalandhar",
"Jammu",
"Jamshedpur",
"Jodhpur",
"Kannur",
"Kanpur",
"Kochi",
"Kolkata",
"Kota",
"Kozhikode",
"Lucknow",
"Ludhiana",
"Madurai",
"Mangalore",
"Meerut",
"Moradabad",
"Mumbai",
"Muzaffarpur",
"Mysore",
"Nagpur",
"Nashik",
"Patna",
"Pondicherry",
"Prayagraj",
"Pune",
"Raipur",
"Rajkot",
"Ranchi",
"Salem",
"Solapur",
"Srinagar",
"Surat",
"Thiruvananthapuram",
"Tiruchirappalli",
"Tiruppur",
"Vadodara",
"Varanasi",
"Vijayawada",
"Visakhapatnam",
"Warangal"
],
"Indonesia": [
"Bandar Lampung",
"Bandjarmasin",
"Bandung",
"Denpasar",
"Jakarta",
"Jambi",
"Makassar",
"Medan",
"Padang",
"Palembang",
"Pekanbaru",
"Pontianak",
"Samarinda",
"Semarang",
"Surabaya",
"Yogyakarta"
],
"Japan": [
"Fukuoka",
"Hamamatsu",
"Hiroshima",
"Kagoshima",
"Kitakyushu",
"Kumamoto",
"Matsuyama",
"Nagoya",
"Niigata",
"Okayama",
"Osaka-Kyoto",
"Sapporo",
"Sendai",
"Tokyo",
"Utsunomiya"
],
"Kazakhstan": [
"Almaty",
"Nur-Sultan"
],
"Kyrgyzstan": [
"Bishkek"
],
"Lao PDR": [
"Vientiane"
],
"Macao, China": [
"Macao"
],
"Malaysia": [
"Georgetown (Malaysia)",
"Ipoh",
"Johor Bahru",
"Kota Bharu",
"Kota Kinabalu",
"Kuala Lumpur",
"Kuala Muda",
"Kuantan",
"Kuching",
"Malacca",
"Seremban"
],
"Maldives": [
"Male"
],
"Mongolia": [
"Ulaanbaatar"
],
"Myanmar": [
"Mandalay",
"Nay Pyi Taw",
"Yangon"
],
"Nepal": [
"Kathmandu"
],
"Pakistan": [
"Faisalabad",
"Gujranwala",
"Hyderabad (Pakistan)",
"Islamabad-Rawalpindi",
"Karachi",
"Lahore",
"Multan",
"Peshawar",
"Quetta"
],
"Philippines": [
"Angeles City",
"Bacolod",
"Cagayan de Oro",
"Cebu City",
"Dagupan",
"Davao City",
"General Santos",
"Manila",
"Zamboanga City"
],
"Singapore": [
"Singapore - City"
],
"South Korea": [
"Busan",
"Changwon",
"Daegu",
"Daejeon",
"Gwangju",
"Seoul",
"Ulsan"
],
"Sri Lanka": [
"Colombo"
],
"Taiwan": [
"Hsinchu",
"Kaohsiung",
"Taichung",
"Tainan",
"Taipei"
],
"Tajikistan": [
"Dushanbe"
],
"Thailand": [
"Bangkok"
],
"Turkmenistan": [
"Ashgabat"
],
"Uzbekistan": [
"Tashkent"
],
"Vietnam": [
"Can Tho",
"Da Nang",
"Haiphong",
"Hanoi",
"Ho Chi Minh City"
]
},
"Europe": {
"Albania": [
"Tirana"
],
"Armenia": [
"Yerevan"
],
"Austria": [
"Graz",
"Linz",
"Vienna"
],
"Belarus": [
"Gomel",
"Minsk"
],
"Belgium": [
"Antwerp",
"Brussels",
"Charleroi",
"Gent",
"Liege"
],
"Bosnia and Herzegovina": [
"Sarajevo"
],
"Bulgaria": [
"Plovdiv",
"Sofia",
"Varna"
],
"Croatia": [
"Zagreb"
],
"Cyprus": [
"Nicosia"
],
"Czech Republic": [
"Brno",
"Ostrava",
"Prague"
],
"Denmark": [
"Aarhus",
"Copenhagen"
],
"Estonia": [
"Tallinn"
],
"Finland": [
"Helsinki",
"Tampere"
],
"France": [
"Bordeaux",
"Caen",
"Clermont-Ferrand",
"Dijon",
"Grenoble",
"Lille",
"Lyon",
"Marseille",
"Montpellier",
"Nancy",
"Nantes",
"Nice",
"Orleans",
"Paris",
"Rennes",
"Rouen",
"Saint-Etienne",
"Strasbourg",
"Toulon",
"Toulouse",
"Tours"
],
"Georgia": [
"Tbilisi"
],
"Germany": [
"Aachen",
"Augsburg",
"Berlin",
"Bonn",
"Braunschweig-Salzgitter Wolfsburg",
"Bremen",
"Cologne",
"Dresden",
"Dusseldorf",
"Erfurt",
"Frankfurt am Main",
"Freiburg im Breisgau",
"Halle an der Saale",
"Hamburg",
"Hanover",
"Karlsruhe",
"Kiel",
"Leipzig",
"Mainz",
"Mannheim-Ludwigshafen",
"Muenster",
"Munich",
"Nuremberg",
"Ruhr",
"Stuttgart",
"Wiesbaden"
],
"Greece": [
"Athens",
"Thessaloniki"
],
"Hungary": [
"Budapest"
],
"Iceland": [
"Reykjavik"
],
"Ireland": [
"Dublin"
],
"Italy": [
"Bari",
"Bergamo",
"Bologna",
"Catania",
"Florence",
"Genoa",
"Milan",
"Naples",
"Padua",
"Palermo",
"Rome",
"Turin",
"Venice",
"Verona"
],
"Latvia": [
"Riga"
],
"Lithuania": [
"Vilnius"
],
"Luxembourg": [
"Luxembourg - City"
],
"Malta": [
"Valletta"
],
"Moldova": [
"Chi\u015fin\u0103u"
],
"Montenegro": [
"Podgorica"
],
"Netherlands": [
"Amsterdam",
"Eindhoven",
"Groningen",
"Rotterdam",
"The Hague",
"Utrecht"
],
"North Macedonia": [
"Skopje"
],
"Norway": [
"Bergen",
"Oslo"
],
"Poland": [
"Bialystok",
"Bydgoszcz",
"Gdansk",
"Katowice",
"Kracow",
"Lodz",
"Lublin",
"Poznan",
"Szczecin",
"Warsaw",
"Wroclaw"
],
"Portugal": [
"Lisbon",
"Porto"
],
"Romania": [
"Bucharest",
"Iasi"
],
"Russia": [
"Astrakhan",
"Barnaul",
"Chelyabinsk",
"Ekaterinburg",
"Irkutsk",
"Izhevsk",
"Kazan",
"Khabarovsk",
"Krasnodar",
"Krasnoyarsk",
"Lipetsk",
"Makhachkala",
"Moscow",
"Nizhniy Novgorod",
"Novokuznetsk",
"Novosibirsk",
"Omsk",
"Orenburg",
"Penza",
"Perm",
"Rostov-on-Don",
"Ryazan",
"Samara",
"Saratov",
"St Petersburg",
"Tomsk",
"Tula",
"Tyumen",
"Ufa",
"Ulyanovsk",
"Vladivostok",
"Volgograd",
"Voronezh",
"Yaroslavl"
],
"Serbia": [
"Belgrade"
],
"Slovakia": [
"Bratislava"
],
"Slovenia": [
"Ljubljana"
],
"Spain": [
"A Coruna",
"Alicante",
"Barcelona",
"Bilbao",
"Granada",
"Las Palmas",
"Madrid",
"Malaga",
"Murcia",
"Palma de Mallorca",
"Santa Cruz de Tenerife",
"Seville",
"Valencia (Spain)",
"Valladolid",
"Vigo",
"Zaragoza"
],
"Sweden": [
"Gothenburg",
"Malmo",
"Stockholm"
],
"Switzerland": [
"Basel",
"Bern",
"Geneva",
"Lausanne",
"Zurich"
],
"Turkey": [
"Adana",
"Adapazar\u0131",
"Ankara",
"Antalya",
"Batman",
"Bursa",
"Denizli",
"Diyarbakir",
"Gaziantep",
"Istanbul",
"Izmir",
"Kahramanmaras",
"Kayseri",
"Konya",
"Malatya",
"Samsun"
],
"Ukraine": [
"Dnipro",
"Kharkiv",
"Kyiv",
"Lviv",
"Mykolaiv",
"Odesa",
"Zaporizhzhia"
],
"United Kingdom": [
"Aberdeen",
"Belfast",
"Birmingham (UK)",
"Bournemouth",
"Brighton and Hove",
"Bristol",
"Cambridge",
"Cardiff",
"Coventry",
"Derby",
"Edinburgh",
"Glasgow",
"Kingston upon Hull",
"Leeds",
"Leicester",
"Liverpool",
"London",
"Manchester",
"Newcastle upon Tyne",
"Northampton",
"Nottingham",
"Oxford",
"Portsmouth",
"Sheffield",
"Southampton"
]
},
"Middle East": {
"Bahrain": [
"Manama"
],
"Iran": [
"Ahvaz",
"Esfahan",
"Kerman",
"Kermanshah",
"Mashhad",
"Orumiyeh",
"Qom",
"Rasht",
"Shiraz",
"Tabriz",
"Tehran",
"Zahedan"
],
"Iraq": [
"Baghdad"
],
"Israel": [
"Haifa",
"Jerusalem",
"Tel Aviv"
],
"Jordan": [
"Amman"
],
"Kuwait": [
"Kuwait City"
],
"Lebanon": [
"Beirut"
],
"Oman": [
"Muscat"
],
"Qatar": [
"Doha"
],
"Saudi Arabia": [
"Dammam",
"Jeddah",
"Mecca",
"Medina",
"Riyadh"
],
"UAE": [
"Abu Dhabi",
"Dubai-Sharjah-Ajman"
]
},
"Oceania": {
"Australia": [
"Adelaide",
"Brisbane",
"Canberra",
"Melbourne",
"Perth",
"Sydney"
],
"Fiji": [
"Suva"
],
"New Zealand": [
"Auckland",
"Christchurch",
"Wellington"
],
"Papua New Guinea": [
"Port Moresby"
]
}
}
@asehmi
Copy link
Author

asehmi commented Nov 4, 2022

cascade_selection

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment