遍历字典,搜索副本并将副本列表追加到列表

时间:2020-06-15 09:48:19

标签: python loops

我试图遍历字典以搜索副本,将这些副本(如果存在的话)添加到列表中,然后将该列表追加到另一个包含所有副本作为子列表的列表中。例如 a.jpg b.jpg和c.jpg都是同一张图片,并且都是副本。 1.jpg和2.jpg也是同一张照片,因此也是每张照片的副本,因此最终列表copies将包含2个子列表:copies = [[a.jpg, b.jpg, c.jpg], [1.jpg, 2.jpg]]

这是我的代码:

def deal_with_dubs():
    print("FILES: ", FILE_HASH_DICTIONARY)
    for file1 in FILE_HASH_DICTIONARY:
        #print (str(file1))
        count = 0
        copy = []
        copy.append(file1)
        for file2 in FILE_HASH_DICTIONARY:
            if FILE_HASH_DICTIONARY[file1] == FILE_HASH_DICTIONARY[file2]:
                count = count +1
                if count > 1:copy.append(file2)


            if len(copy) > 1 and copies.__contains__(copy) == False:copies.append(copy)
    copies.sort()
    for n in copies:print(n)

我得到的输出是:

('FILES: ', {'stuff.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', '2.jpg': '9687f69f124876cbdb98045617c37df46e13a594', 'test.py': '41ddcacda888fbb43791825fff6855de94c1e3fe', 'dubs.py': '574c4570038820d81bcbe4cf8cdadcf9db2c7820', 'Elliot.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f', '1.jpg': '9687f69f124876cbdb98045617c37df46e13a594', 'hello_friend.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', 'blade15-2020-gallery-05.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', '.DS_Store': '980b43f31413a0e94ae62ec9e5ec546bee9fe16b', 'nnnn.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', 'test2.py': 'e05f020b979c5f03348d85dc138f7bed07101c6b', 'blah.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f'})
['1.jpg', '1.jpg']
['2.jpg', '1.jpg']
['Elliot.jpg', 'blah.jpg']
['blade15-2020-gallery-05.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
['blah.jpg', 'blah.jpg']
['hello_friend.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
['nnnn.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
['stuff.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']

这是在捕获副本(在这种情况下:

[Elliot.jpg, blah.jpg], 
['blade15-2020-gallery-05.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg'] and['2.jpg', '1.jpg'], there are multiple file copies, like [1.jpg, 1.jpg])

我已经尝试过解决这个问题,但是我不明白为什么它会列出重复项。

1 个答案:

答案 0 :(得分:1)

这是您要找的吗?

files = {'stuff.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
         '2.jpg': '9687f69f124876cbdb98045617c37df46e13a594',
         'test.py': '41ddcacda888fbb43791825fff6855de94c1e3fe',
         'dubs.py': '574c4570038820d81bcbe4cf8cdadcf9db2c7820',
         'Elliot.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f',
         '1.jpg': '9687f69f124876cbdb98045617c37df46e13a594',
         'hello_friend.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
         'blade15-2020-gallery-05.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
         '.DS_Store': '980b43f31413a0e94ae62ec9e5ec546bee9fe16b',
         'nnnn.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
         'test2.py': 'e05f020b979c5f03348d85dc138f7bed07101c6b',
         'blah.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f'}


from collections import defaultdict
def deal_with_dubs(files):
    hash_to_names = defaultdict(list)
    for name, hash_k in files.items():
        hash_to_names[hash_k].append(name)
    copies = []
    for names in hash_to_names.values():
        if len(names) > 1:
            names.sort()
            copies.append(names)
    print(copies)

deal_with_dubs(files)

输出:

[['blade15-2020-gallery-05.jpg', 'hello_friend.jpg', 'nnnn.jpg', 'stuff.jpg'], ['1.jpg', '2.jpg'], ['Elliot.jpg', 'blah.jpg']]