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

时间:2018-11-14 08:20:18

标签: python

我有一个python字典,看起来如下 key: leftname//rightname

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

我想确保每个“左名”仅出现一次。如果再次出现,我要删除该键的整个值。

这是字典本节之后的样子,条目被划掉(删除)

enter image description here

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

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

2 个答案:

答案 0 :(得分:2)

您可以这样做:

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是保存数据的字典。

答案 1 :(得分:0)

这是一种可行的方法:

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