删除分配给字典中每个键的值列表中的重复项的函数?
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']}
这就是分解成步骤后函数的过程应该是这样的。
- 该函数应首先在字典中查找重复的键,当它找到它们时,它会将它们合并为一个键,同时从重复项中继承值。如果没有重复,那么这一步可以跳过
(例如,关键字 ‘deli’
在字典中出现了多次,因此它的副本将被合并到 'deli’:[‘beef’,’chicken’,’beef’,’chicken’,’chicken’,’beef’]
中。对于 ‘bakery’
也会发生同样的情况,它变成‘bakery’:[‘chicken’,’chicken’]
。‘meat_store’
没有任何重复项,因此不会合并任何内容,值保持不变。)
- 之后,该函数检查每个键值列表中的重复项。这会将
‘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']}]
我想制作一个函数,首先在字典中按键合并重复条目,然后删除每个键中的重复值。但是,我希望删除的重复项与它们所在的值列表中的其他值相关,而不是整个字典的值列表。如果可能的话,是否可以仅使用 没有列表理解的 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']}
这就是分解成步骤后函数的过程应该是这样的。
- 该函数应首先在字典中查找重复的键,当它找到它们时,它会将它们合并为一个键,同时从重复项中继承值。如果没有重复,那么这一步可以跳过
(例如,关键字 ‘deli’
在字典中出现了多次,因此它的副本将被合并到 'deli’:[‘beef’,’chicken’,’beef’,’chicken’,’chicken’,’beef’]
中。对于 ‘bakery’
也会发生同样的情况,它变成‘bakery’:[‘chicken’,’chicken’]
。‘meat_store’
没有任何重复项,因此不会合并任何内容,值保持不变。)
- 之后,该函数检查每个键值列表中的重复项。这会将
‘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']}]