Python:在字典中搜索松散匹配

Python:在字典中搜索松散匹配,python,Python,我有一本python字典,如下所示 格式为{key:'leftname//rightname')} 我想确保每个“leftname”只出现一次。如果它再次出现,我想删除该键的整个值 这就是词典的这一部分在后面应该是什么样子,把词条划掉(删除) 注意Ruby是如何出现两次的。这很好,因为我只需要确保每个“Leftname”都是唯一的。每个“RightName”都可以重复 我试图用str.split创建一个单独的名称数组。我不知道如何使用正则表达式过滤和删除重复项。 坦率地说,我不知道我将如何做

我有一本python字典,如下所示

格式为
{key:'leftname//rightname')}

我想确保每个“leftname”只出现一次。如果它再次出现,我想删除该键的整个值

这就是词典的这一部分在后面应该是什么样子,把词条划掉(删除)

注意Ruby是如何出现两次的。这很好,因为我只需要确保每个“Leftname”都是唯一的。每个“RightName”都可以重复

我试图用str.split创建一个单独的名称数组。我不知道如何使用正则表达式过滤和删除重复项。 坦率地说,我不知道我将如何做到这一点

您可以这样做:

output = {}
seen = set()
for k,v in data.items():
    leftname = v.split(' // ')[0]
    if leftname not in seen:
        seen.add(leftname)
        output[k] = v

其中
data
是保存数据的字典

这里有一种工作方法:

# simplified example
d = {1:'a // b', 2:'c // d', 3:'a // d', 4:'e // d'}

d_new = {}
seen_leftname = set()
for key, val in d.items():
    leftname = val.split(' // ')[0]
    if leftname not in seen_leftname:
        seen_leftname.add(leftname)
        d_new[key] = val

print(d_new)
{1: 'a // b', 2: 'c // d', 4: 'e // d'}
您还可以重置按键:

d_new = {}
seen_leftname = set()
key_new = 1
for val in d.values():
    leftname = val.split(' // ')[0]
    if leftname not in seen_leftname:
        seen_leftname.add(leftname)
        d_new[key_new] = val
        key_new += 1

print(d_new)
{1: 'a // b', 2: 'c // d', 3: 'e // d'}

任务的第一部分:将数据转换为比在一个字符串字段中包含两个值更合适的结构。第二部分:将数据转换为纯文本。图像让事情变得更难。是的,也许值得加上你迄今为止所做的。如果我们不知道您到目前为止做了什么,很难判断需要修复什么。在您添加我的答案中的
seen=set()
等之前,我们投了反对票,因为这是错误的。太好了!谢谢:)