Saya ingin mencapai yang berikut, tetapi menggunakan kamus.

name_selected = "Jason"

if name_selected == "John":
    age = 10
    gender = "Male"
elif name_selected == "Jason":
    age = 20
    gender = "Male"

print(age, gender)
data = {"name": ["John", "Jason"],
         "age": [10, 20],
      "gender": ["Male", "Male"]}
2
Shantanu 12 Mei 2021, 19:06

2 jawaban

Jawaban Terbaik

Itu adalah organisasi data yang buruk. Akan lebih baik jika Anda menjadikan nama sebagai kunci kamus:

data = {
    "John": { "age": 10, "gender": "Male"},
    "Jason": { "age": 20, "gender": "Male"}
}

age = data[name_selected]["age"]
gender = data[name_selected]["gender"]

Tetapi jika Anda terjebak dengan struktur data Anda, Anda dapat menggunakan index() untuk mendapatkan indeks di elemen name, lalu gunakan itu untuk mendapatkan nilai yang sesuai di elemen lainnya.

try:
    index = data['name'].index(name_selected)
    age = data['age'][index]
    gender = data['gender'][index]
except:
    print(f'{name_selected} not found')
4
Barmar 12 Mei 2021, 16:14

Karena Anda menguji name_selected == ..., kemungkinan nilai name_selected adalah kamus yang Anda inginkan. Kamus adalah struktur yang menggantikan pencarian if-elif pada variabel.

Mengingat itu, Anda dapat menyimpan data yang tersisa dengan berbagai cara. Inilah Tuple yang dapat Anda bongkar:

data = {'John': (10, 'Male'),
        'Jason': (20, 'Male')}

Maka Anda bisa melakukannya

age, gender = data[name_selected]

Anda dapat memperluas ide dengan kamus bersarang lain:

data = {'John': {
    'age': 10, 'gender': 'Male'},
        'Jason': {
    'age': 20, 'gender': 'Male'}
}

Sekarang mungkin lebih baik untuk tidak membongkar:

person = data[name_selected]
# use person ['age'] and person['gender']

Solusi yang lebih spesifik untuk aplikasi adalah membuat nilai objek kustom (seperti collections.namedtuple) yang memungkinkan Anda mengakses data untuk individu sebagai atribut.

2
Mad Physicist 12 Mei 2021, 16:19