我想做一个函数,首先在字典中按键合并重复条目,然后删除每个键中的重复值.但是,我希望删除的重复项与它们所在的值列表中的其他值相关,而不是整个字典的值列表.如果可能的话,是否可以使用only for-loops without list comprehension?

An example input would look like

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’没有任何重复值,因此这不适用于密钥.然后,返回新词典.

What I have tried doing

我想try 测试一些变量,看看是否可以隔离并消除列表中的重复项.下面的列表与我试图定义的函数不同,但它假设字典中的值已被提取到名为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']].我计划在定义函数时使用类似的代码行,但是我不确定它是否能工作.

推荐答案

字典值的完美数据 struct 应该是集合,而不是列表,因为您不希望重复.所以,如果这不是现在或将来的限制,我建议你做出改变.

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

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']}]

Python相关问答推荐

如何在Pygame中绘制右对齐的文本?

Django注释:将时差转换为小数或小数

查找下一个值=实际值加上使用极点的50%

从包含数字和单词的文件中读取和获取数据集

无法使用equals_html从网址获取全文

使用SciPy进行曲线匹配未能给出正确的匹配

Odoo 14 hr. emergency.public内的二进制字段

如何让剧作家等待Python中出现特定cookie(然后返回它)?

_repr_html_实现自定义__getattr_时未显示

管道冻结和管道卸载

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

迭代嵌套字典的值

如何并行化/加速并行numba代码?

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

为什么\b在这个正则表达式中不解释为反斜杠

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

如何使用使用来自其他列的值的公式更新一个rabrame列?

在Admin中显示从ManyToMany通过模型的筛选结果

如何按row_id/row_number过滤数据帧

判断Python操作:如何从字面上得到所有decorator ?