2016-04-02 4 views
1

У меня есть словарь под названием hash_vs_file ключей file_hash значение file_path (список из одного или нескольких путей файлов)список фильтров значений в словаре

Я хочу, чтобы изолировать и печатать только те элементы, где список является дольше, чем один путь к файлу.

Я пытаюсь, без результата:

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

ответ

0

Используйте iteritems() этот путь вместо этого:

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

Так как вы сделали, вы получаете только ключи словаря поэтому проверка длины file_path не удается.

Update:

Вы просили читаемости выхода. Вы можете вдохновить себя от этого метода:

print file_path, file_hash 

Или это лучше тот, который опирается на format():

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

Или, если вы хотите, чтобы выглядеть как список, попробуйте вместо этого:

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

Legend. что сделал трюк, и на уровне сложности я могу понять !. Один последующий вопрос, когда я не пытался фильтровать по длине, и просто использовал ** для file_hash в файле hash_vs_file: ** он напечатал бы файл hash_file в одной строке и каждый путь к файлу в отдельной строке. Теперь все значения выполняются вместе как список. есть ли простой способ разделить их на отдельные строки для удобства чтения? – Jeffnewy

+0

Проверьте обновленный ответ. @Jeffnewy –

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

Метод .items() дает кортеж ключ и значение. Вы можете распаковать этот кортеж file_hash, file_path, так что у вас есть доступ к каждому file_hash и file_path на каждой итерации.

0

В качестве альтернативы вы можете использовать встроенную функцию filter для возврата итератора так:

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])) 

Или вы можете использовать dict comprehension для вновь фильтруется словаря:

hash_vs_file = {fhash: fpath for fhash, fpath in hash_vs_file.items() if len(fpath) > 1} 
print(hash_vs_file) 
Смежные вопросы