Itu cara yang sangat aneh untuk mengatur sesuatu. Jika Anda menyimpan dalam kamus, ini mudah:
# This example should work in any version of Python.
# urls_d will contain URL keys, with counts as values, like: {'http://www.google.fr/' : 1 }
urls_d = {}
for url in list_of_urls:
if not url in urls_d:
urls_d[url] = 1
else:
urls_d[url] += 1
Kode untuk memperbarui kamus hitungan ini adalah "pola" umum di Python. Sangat umum bahwa ada struktur data khusus defaultdict
,, dibuat hanya untuk membuatnya lebih mudah:
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
Jika Anda mengakses defaultdict
menggunakan kunci, dan kuncinya belum ada di dalam defaultdict
, kunci tersebut secara otomatis ditambahkan dengan nilai default. The defaultdict
mengambil callable yang Anda berikan, dan memanggilnya untuk mendapatkan nilai default. Dalam hal ini, kami lulus di kelas int
; ketika Python memanggilnya int()
mengembalikan nilai nol. Jadi, pertama kali Anda mereferensikan URL, hitungannya diinisialisasi ke nol, lalu Anda menambahkan satu ke hitungan.
Tetapi kamus yang penuh hitungan juga merupakan pola umum, jadi Python menyediakan kelas yang siap digunakan: containers.Counter
Anda cukup membuat sebuah Counter
instance dengan memanggil kelas tersebut, meneruskan iterable apa pun; itu membangun kamus di mana kuncinya adalah nilai dari iterable, dan nilainya dihitung dari berapa kali kunci muncul di iterable. Contoh di atas kemudian menjadi:
from collections import Counter # available in Python 2.7 and newer
urls_d = Counter(list_of_urls)
Jika Anda benar-benar perlu melakukannya seperti yang Anda tunjukkan, cara termudah dan tercepat adalah menggunakan salah satu dari tiga contoh ini, dan kemudian membangun yang Anda butuhkan.
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
urls = [{"url": key, "nbr": value} for key, value in urls_d.items()]
Jika Anda menggunakan Python 2.7 atau yang lebih baru, Anda dapat melakukannya dalam satu baris:
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]