2016-03-28 19 views
-6

değerlerden dayalı bir ListePython Formu sözlüğe Sıralı var ben python yeniyim sözlükte

dictA = {f1 : ["s","r"], 
     f2 : ["p"], 
     f3 : ["w","t"]} 

Ben Sözlük dicta mevcut değerlerden sadece 1 öğe olmalı listesini oluşturmak nasıl o list_size_limit = 5

Final list ["s","p","w","r","t"] 

eğer list_size_limit = 3

ulaşana kadar ve bu yüzden üzerinde 2 elemanları tarafından takip ... ve i 2 elemanlar tarafından takip sözlüğün tüm değerlerin 1 elemanları listesi 1. bulunması gereken bir liste ... 3 elemanlar
+3

sen denedi Ne, ve hassas onunla sorun nedir? Bir sözlükten çıktıların çıkış sırasını garanti edemeyeceğinizi unutmayın, buna ihtiyacınız olup olmadığı net değildir. – jonrsharpe

+0

Bu soruda doğal bir sorun var. '{ "W", "s", "s",} 'herhangi bir permütasyon olabilir' list_size_limit == 3' ile list ' 'böylece sözlük, anahtarlarını sırasız bulunmaktadır. [ 'OrderedDict'] (https://docs.python.org/3/library/collections.html#collections.OrderedDict) en azından yardımcı olabilir. – Kupiakos

+0

i Orderdict() dicta ben sözlüğün tüm değerlerin tüm 1st elemanları 2 elemanları ... 3 elemanlar – FryMan

cevap

0
dictA = {"f1" : ["m"], 
     "f2" : ["p","y","o","a","s","d","f","g"], 
     "f3" : ["w","t"], 
     "f5" : ["z","x"], 
     "f6" : ["c","v"]} 

result = [] 
limit_size = 3 
values_list = [] 
for values in dictA.itervalues(): 
    values_list.append(len(values)) 

for i in range(0,max(values_list)): 
    keys = list(dictA.keys()) 
    count = 0 
    while count < len(keys): 
     try: 
      result.append(dictA[keys[count]][i]) 
     except IndexError: 
      dictA.pop(keys[count]) 
     count = count + 1 
print "final ",result[0:limit_size] 
2

bu işlevi çağırmak ne Dürüst emin

oluştururlar nasıl 210
Final list = ["s","p","w"] 

. Adları söylemek zor.

def getFirstOfDictList(d, limit=None): 
    if limit is None: 
     limit = float('inf') 
    done = 0 
    iters = [iter(i) for i in d.values()] 
    items = [] 
    while iters: 
     toRemove = [] 
     for iterator in iters: 
      if done >= limit: 
       return items 
      try: 
       items.append(next(iterator)) 
       done += 1 
      except StopIteration: 
       toRemove.append(iterator) 
     for finishedIterator in toRemove: 
      iters.remove(finishedIterator) 
    return items 
+0

çözmek için herhangi bir alternatif yolu? Iter nesnesi oluşturma dışı – FryMan