2016-04-02 20 views
1

Ben tuşları file_hash değerleri file_path Ben izole etmek ve istediğiniz (bir veya daha fazla filepaths listesi)filtre listesi

are hash_vs_file denilen bir sözlük var listesidir baskı sadece ürün bir dosya yolundan daha uzun.

Ben sonuçsuz, çalışıyorum:

for file_hash in hash_vs_file: 
    if len(file_path) > 1 in hash_vs_file.items(): 
     print file_hash 
     print file_path 

cevap

0

kullanın iteritems() bu şekilde: Yaptığın yolu, bunu file_path uzunluğunu kontrol sözlüğün yalnızca anahtarlarını alıyorsanız

for file_hash, file_path in hash_vs_file.iteritems(): 
    if len(file_path) > 1: 
     print file_path 
     print file_hash 

Çünkü başarısız olur.

Güncelleme:

Sen çıktı okunabilirliği istedi.

print file_path, file_hash 

Ya format() dayanan bu iyi biri: Bu yöntemle kendinizi ilham verebilir bunu bir listesi gibi bakmak isterseniz,

print "File Path: {} ------ File Hash: {}".format(file_path,file_hash) 

Veya, bunun yerine bu deneyin:

print "[{}, {}]".format(file_path,file_hash) 
+0

Legend. Bu hile yaptı ve bir karmaşıklık seviyesinde anlayabiliyorum !. Tek bir takip sorusu, uzunluğa göre filtrelemediğimde ve sadece hash_vs_file dosyasında file_hash için ** kullandı: ** bir satırda hash_file ve her bir file_path ayrı bir satırda yazdı. Şimdi tüm değerler bir liste halinde birlikte çalışır. okunabilirlik için bunları ayrı satırlara ayırmanın basit bir yolu var mı? – Jeffnewy

+0

Güncellenmiş yanıtımı kontrol et. @Jeffnewy –

0
for file_hash, file_path in hash_vs_file.items(): 
    if len(file_path) > 1: 
     print file_hash 
     print file_path 

yöntem .items() size anahtar ve değer bir demet verir. Bu tuple'ı file_hash, file_path ile açabilirsiniz, böylece her bir yinelemede her bir file_hash ve file_path erişiminiz vardır. yerine

0

Alternatif olarak,

gibi bir yineleyiciyi döndürmek için filter işlevinde yerleşik işlevi kullanabilirsiniz.
for file_hash in filter(lambda key: len(hash_vs_file[key]) > 1, hash_vs_file): 
    print("{} : {}".format(file_hash, hash_vs_file[file_hash])) 

Yoksa yeni filtrelenmiş sözlük için dict comprehension kullanabilirsiniz:

hash_vs_file = {fhash: fpath for fhash, fpath in hash_vs_file.items() if len(fpath) > 1} 
print(hash_vs_file)