Saya punya daftar dicts seperti ini:
[{'value': 'apple', 'blah': 2},
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]
saya ingin ['apple', 'banana', 'cars']
Apa cara terbaik untuk melakukan ini?
python
list
dictionary
SuperString
sumber
sumber
[d.value for d in l]
terima kasih :)Berikut cara lain untuk melakukannya menggunakan fungsi map () dan lambda:
dimana l adalah daftarnya. Saya melihat ini "paling seksi", tetapi saya akan melakukannya dengan menggunakan daftar pemahaman.
Pembaruan: Seandainya 'nilai' mungkin hilang sebagai penggunaan utama:
Update: Saya juga bukan penggemar lambdas, saya lebih suka menyebutkan beberapa hal ... ini adalah bagaimana saya akan melakukannya dengan itu dalam pikiran:
Saya bahkan akan melangkah lebih jauh dan membuat satu-satunya fungsi yang secara eksplisit mengatakan apa yang ingin saya capai:
Dengan Python 3, sejak
map
mengembalikan sebuah iterator, gunakanlist
untuk mengembalikan daftar, misalnyalist(map(operator.itemgetter('value'), l))
.sumber
map
, gunakanoperator.itemgetter('value')
, bukan alambda
.sumber
getkey
.. maksud Andad.get('value')
? Itu akan sama dengan pemahaman daftar ke-2 @ isbadawi, bukan pemahaman Michal.Untuk kasus yang sangat sederhana seperti ini, pemahaman, seperti dalam jawaban Ismail Badawi jelas merupakan jalan yang harus ditempuh.
Tetapi ketika segala sesuatunya menjadi lebih rumit, dan Anda perlu mulai menulis multi-klausa atau pemahaman bersarang dengan ekspresi kompleks di dalamnya, ada baiknya mencari alternatif lain. Ada beberapa cara standar (kuasi) untuk menentukan pencarian gaya XPath pada struktur dict-and-list bersarang, seperti JSONPath, DPath, dan KVC. Dan ada perpustakaan bagus di PyPI untuk mereka.
Berikut ini contoh dengan nama perpustakaan
dpath
, yang menunjukkan bagaimana perpustakaan dapat menyederhanakan sesuatu yang sedikit lebih rumit:Atau, menggunakan
jsonpath-ng
:Yang satu ini mungkin tidak terlihat sesederhana pada pandangan pertama, karena
find
mengembalikan objek yang cocok, yang mencakup semua jenis hal selain hanya nilai yang cocok, seperti jalur langsung ke setiap item. Tetapi untuk ekspresi yang lebih kompleks, bisa menentukan jalan seperti'*.[*].value'
bukannya klausa pemahaman untuk masing-masing*
dapat membuat perbedaan besar. Plus, JSONPath adalah spesifikasi bahasa-agnostik, dan bahkan ada penguji online yang bisa sangat berguna untuk debugging.sumber
Saya pikir sesederhana di bawah ini akan memberi Anda apa yang Anda cari.
Anda dapat melakukan ini dengan kombinasi
map
danlambda
juga tetapi daftar pemahaman terlihat lebih elegan dan pythonic.Untuk pemahaman daftar input yang lebih kecil adalah cara untuk pergi tetapi jika input benar-benar besar maka saya kira generator adalah cara yang ideal.
Berikut ini adalah perbandingan dari semua solusi yang mungkin untuk input yang lebih besar
Seperti yang Anda lihat, generator adalah solusi yang lebih baik dibandingkan dengan yang lain, peta juga lebih lambat dibandingkan dengan generator karena alasan saya akan menyerahkan OP untuk mencari tahu.
sumber
Ikuti contohnya --
sumber
Dapatkan nilai kunci dari daftar kamus dengan python?
Ex:
untuk d dalam data:
Keluaran:
sumber
Cara yang sangat sederhana untuk melakukannya adalah:
Keluaran:
sumber