删除分配给字典中每个键的值列表中的重复项的函数?

Function that removes duplicates in a list of values assigned to each key in a dictionary?

我想制作一个函数,首先在字典中按键合并重复条目,然后删除每个键中的重复值。但是,我希望删除的重复项与它们所在的值列表中的其他值相关,而不是整个字典的值列表。如果可能的话,是否可以仅使用 没有列表理解的 for 循环来完成此操作?

示例输入如下所示

remove_value_duplicates(Stores)

哪里

Stores = [{'deli': ['beef', 'chicken', 'beef'],
           'bakery': ['chicken']},
          {'deli': ['chicken', 'chicken', 'beef'],
           'bakery': ['chicken'],
           'meat_store': ['beef']}]

输出为

{'deli': ['beef', 'chicken'],
 'bakery': ['chicken'],
 'meat_store': ['beef']}

这就是分解成步骤后函数的过程应该是这样的。

  1. 该函数应首先在字典中查找重复的键,当它找到它们时,它会将它们合并为一个键,同时从重复项中继承值。如果没有重复,那么这一步可以跳过

(例如,关键字 ‘deli’ 在字典中出现了多次,因此它的副本将被合并到 'deli’:[‘beef’,’chicken’,’beef’,’chicken’,’chicken’,’beef’] 中。对于 ‘bakery’ 也会发生同样的情况,它变成‘bakery’:[‘chicken’,’chicken’]‘meat_store’ 没有任何重复项,因此不会合并任何内容,值保持不变。)

  1. 之后,该函数检查每个键值列表中的重复项。这会将 ‘deli’:[‘beef’,’chicken’,’beef’,’chicken’,’chicken’,’beef’] 缩短为 ‘deli’:[‘beef’,’chicken’],将 ‘bakery’:[‘chicken’,’chicken’] 缩短为 ‘bakery’[‘chicken’]‘meat_store’ 没有任何重复值,因此这不适用于密钥。在此之后,返回新字典。

我尝试过的事情

我想尝试测试一些变量,看看是否可以隔离并删除列表中的重复项。下面的列表与我试图定义的函数不同,但它假定字典中的值已提取到名为 wordlists 的变量中。我想看看是否可以从子列表中删除重复项,然后将修改后的子列表重新附加到更大的列表中。

wordlists = [['meat', 'meat', 'cheese'],['onions']]

new_lists = []
new_sublists = []
for sublists in wordlists:
    for values in sublists:
        if values not in new_sublists:
            new_sublists.append(values)
new_sublists
new_lists.append(new_sublists)
new_lists

output:
[['meat', 'cheese', 'onions']]

虽然该过程确实删除了重复的字符串,但它不会按预期重新附加修改后的子列表。我想要的预期输出应该类似于 [['meat','cheese'],['onions']]。我计划在定义函数时使用类似这样的代码行,但是我不确定它是否有效。

字典值的完美数据结构是集合而不是列表,因为您不希望重复。因此,如果这不是现在或将来的限制,我建议您进行更改。

但是如果它是一个约束,下面可能是你的代码:

def remove_value_duplicates(Stores):
    for Store in Stores:
        for k,v in Store.items():
            v_set = set()
            i = 0
            while i<len(v):
                item = v[i]
                if item in v_set:
                    v.pop(i)
                else:
                    v_set.add(item)
                    i+=1
                
Stores = [{'deli': ['beef', 'chicken', 'beef'], 'bakery': ['chicken']}, {'deli': ['chicken', 'chicken', 'beef'], 'bakery': ['chicken'],'meat_store':['beef']}]
Store = Stores[1]
remove_value_duplicates(Stores)

print(Stores)

你输入上面的代码输出结果如下:

[{'deli': ['beef', 'chicken'], 'bakery': ['chicken']}, {'deli': ['chicken', 'beef'], 'bakery': ['chicken'], 'meat_store': ['beef']}]