Saya telah mencoba mengekstrak data dari kamus multi level di python contoh kamus yang saya ekstrak adalah:
{"family": {
"name": "Mary",
"age": "32",
"sex": "female",
"kids": [
{
"name": "jim",
"age": "10",
"sex": "male",
"dob_year": "2007",
"ssn": "123-23-1234"
},
{
"name": "jill",
"age": "6",
"sex": "female",
"dob_year": "2011",
"ssn": "123-23-1235"
}]}}
ss = test0["family"]["kids"]
def search(values, lookup):
for k in values:
for v in values:
if lookup in v:
return k
return None
print search(ss, '201')
Tujuan saya adalah untuk mencari kata kunci (tidak tepat) dalam nilai kamus bersarang dan mengembalikan kamus lengkap atau nilai kunci tertentu seperti "23-23-1235" jika ssn diminta.
Membutuhkannya untuk mengembalikan {"name": "jill","age": "6","sex": "female","dob_year": "2011","ssn": "123-23-1235"} dari nilai permintaan di tingkat yang berbeda.
Saat ini hanya menampilkan:{"name": "jim","age": "10","sex": "male", "dob_year": "2007","ssn": "123-23-1234" }
2 jawaban
Coba cara ini:
test0 = {"family": {
"name": "Mary",
"age": "32",
"sex": "female",
"kids": [
{
"name": "jim",
"age": "10",
"sex": "male",
"dob_year": "2007",
"ssn": "123-23-1234"
},
{
"name": "jill",
"age": "6",
"sex": "female",
"dob_year": "2011",
"ssn": "123-23-1235"
}]}}
ss = test0["family"]["kids"]
def search(values, lookup):
for k in values:
if any(lookup in str(s) for s in k.values()):
return k
return None
print search(ss, '201')
Itu akan mencetak:
{'age': '6', 'dob_year': '2011', 'name': 'jill', 'ssn': '123-23-1235', 'sex': 'female'}
str()
.
Bagaimana jika cocok dengan dua hasil?
Jika cocok dengan lebih dari satu hasil tetapi tetap hanya akan mengembalikan satu pengembalian karena fungsi mengembalikan satu per satu oleh memori sehingga solusinya adalah menyimpan hasil di suatu tempat seperti menggunakan daftar untuk menyimpan hasilnya dan kemudian mengembalikannya pada akhirnya, pertama mari kita lihat apakah itu cocok dengan dua hasil lalu apa masalahnya:
Solusi sederhana
def search(values, lookup):
for item in values:
for key,value in item.items():
if lookup in value:
return item
return None
print(search(ss, '20'))
Itu cocok dengan dua hasil tetapi hasilnya adalah:
{'dob_year': '2007', 'ssn': '123-23-1234', 'sex': 'male', 'age': '10', 'name': 'jim'}
Jadi solusinya adalah:
def search(values, lookup):
result = []
for item in values:
for key,value in item.items():
if lookup in value:
if item not in result:
result.append(item)
if result:
return result
else:
return None
print(search(ss, '20'))
Keluaran:
[{'ssn': '123-23-1234', 'sex': 'male', 'dob_year': '2007', 'age': '10', 'name': 'jim'}, {'ssn': '123-23-1235', 'sex': 'female', 'dob_year': '2011', 'age': '6', 'name': 'jill'}]
dict.iteritems()
untuk membaca item dalam kamus.