Wiredtiger, leveldb, bsddb gibi sıralı bir anahtar/değer deposu kullanabilirsiniz. Hepsi özel sıralama işlevini kullanarak sıralı anahtarları destekler. leveldb kullanımı en kolay olanıdır ancak python 2.7, bsddb
is included in the stdlib'u kullanırsanız.
:
from bsddb import hashopen
db = hashopen('dict.db')
db['020'] = 'twenty'
db['002'] = 'two'
db['value'] = 'value'
db['key'] = 'key'
print(db.keys())
Bu
>>> ['002', '020', 'key', 'value']
İşinizi sonra db kapatmak için unutma etmeyin çıkarır: yalnızca kalıcı sıralanmış sözlüğü açmak için ham hashopen
işlevini kullanabilirsiniz sıralama lexicographic gerektiriyorsa
db.close()
Hashopen konfigürasyonunun sizin ihtiyacınıza uygun olmadığı gerçeğine dikkat edin. Bu durumda, hız için basit bir API veya kablolu bağlantıya sahip olan leveldb'yi kullanmanızı tavsiye ederim.
bsddb değerle sipariş etmek için
bileşik anahtar desen veya
anahtar oluşturma kullanmak gerekir. Aradığınız siparişi tutan bir sözlük anahtarı oluşturmak için aşağı doğru kaynayan. Bu örnekte (bsddb anahtarı farklı olacak şekilde) orijinal dict tuşuyla (böylece küçük değerler ilk görünür) ilk özgün dict değerini paketi:
foobar 1
abc 100
a 500
:
import struct
from bsddb import hashopen
my_dict = {'a': 500, 'abc': 100, 'foobar': 1}
# insert
db = hashopen('dict.db')
for key, value in my_dict.iteritems():
composite_key = struct.pack('>Q', value) + key
db[composite_key] = '' # value is not useful in this case but required
db.close()
# read
db = hashopen('dict.db')
for key, _ in db.iteritems(): # iterate over database
size = struct.calcsize('>Q')
# unpack
value, key = key[:size], key[size:]
value = struct.unpack('>Q', value)[0]
print key, value
db.close()
Bu
aşağıdaki verir
python hangi sürümünü kullanıyorsunuz? – amirouche
Bunun ne kadar yararlı olduğunu ispatlayamıyorum, ama şu linki kontrol edin: http://stackoverflow.com/questions/14262433/large-data-work-flows-using-pandas. Amacınız için pandaları kullanabilir misiniz? ? – akash12300
@amirouche python 2.7 – deltaskelta