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