Yinelenen girişlere sahip olduğunuz yorumlarda belirtmiştiniz. Bununla çalışabiliriz. küpe listesini üretme favori yöntemini alın ve bir for
döngüye genişletmek:
from itertools import izip
dictionary = {}
for k, v in izip(List[::2], List[1::2]):
if k not in dictionary:
dictionary[k] = set()
dictionary[k].add(v)
Ya da bir anahtar zaten başlatılmış olup olmadığını kontrol etmek zorunda kalmamak biz collections.defaultdict
kullanabilirsiniz:
from itertools import izip
from collections import defaultdict
dictionary = defaultdict(set)
for k, v in izip(List[::2], List[1::2]):
dictionary[k].add(v)
Tüm anahtarların ayarlandığı bir sözlükle son buluruz ve kümeler değerleri içerir. Bu yine de uygun olmayabilir, çünkü sözlükler gibi kümeler çiftleri tutamaz, bu nedenle aynı değeri iki tutmak için tek bir tuşa ihtiyacınız varsa, bunu bir tuple veya bir listeye değiştirmeniz gerekir. Ama bu başlaman gerek.
Sen daha fazla verimlilik için bir jeneratör liste anlama değiştirmek için '[]' s götürebilirdin: 'dict ((Liste [i] Liste [i + 1] aralığında i için) (0 , len (Liste), 2)) 'Bu şekilde, bir taslak haline getirildikten sonra, daha sonra atmak için bir liste oluşturmaz. –
Sen benim bir hayat kurtarıcımsın, Tanrı seni korusun. Şu an iki saat boyunca çalışıyorum –
Şimdi, [] py2.3 uyumluluğu için ilk önce bıraktığım şey, * ve * aynı zamanda tam tersini duyduğum gerçeği - çok küçük koleksiyonlar için liste inşaatı Jeneratörün inşa edilmesinden daha hızlı. Bu konuda daha fazla detay için meslektaşımdan sorabilirim ama mantıklı. – zzzeek