繁体   English   中英

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

[英]looping over a dictionary, searching for copies and appending list of copies to list

我正在尝试遍历字典以搜索副本,将这些副本(它们存在的地方)添加到列表中,然后将该列表附加到另一个列表中,该列表将包含所有副本作为子列表。 比如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)

我得到的 output 是:

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

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

这是你要找的吗?

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)

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM