0

我有以下字典:

d1 = {'test': ['1', '2', '3'],
      'cool': ['7', '1'],
      'idk': ['3', '2', '7', '1'],
      'idc': ['8'],
      'hm': ['1', '4', '5']}

我想要实现的输出是:

{'test': ['1', '2', '3'],
 'cool': ['7'],
 'idk': [''],
 'idc': ['8'],
 'hm': ['4','5']}

这是我尝试过的代码:

result = {}

for key, value in d1.items():
    if value not in result.values():
        result[key] = value

print("result", str(result))

这并没有给我我期望的输出。我试图保留第一个值并在此之后删除该值的任何出现。任何帮助将不胜感激。

4

2 回答 2

0

您可以创建一个set包含迄今为止所有可见值的变量:

d1 = {
    "test": ["1", "2", "3"],
    "cool": ["7", "1"],
    "idk": ["3", "2", "7", "1"],
    "idc": ["8"],
    "hm": ["1", "4", "5"],
}

out, seen = {}, set()
for k, v in d1.items():
    tmp = []
    for vv in v:
        if vv not in seen:
            tmp.append(vv)
            seen.add(vv)
    out[k] = tmp or [""]
print(out)

印刷:

{
    "test": ["1", "2", "3"],
    "cool": ["7"],
    "idk": [""],
    "idc": ["8"],
    "hm": ["4", "5"],
}

没有的替代方案set

out = {}
for k, v in d1.items():
    for vv in v:
        if not any(vv == vvv for l in out.values() for vvv in l):
            out.setdefault(k, []).append(vv)
    out[k] = out.get(k, [""])
print(out)
于 2021-09-17T18:48:11.560 回答
0

这应该做你需要的: -

d1 = {'test': ['1', '2', '3'],
      'cool': ['7', '1'],
      'idk': ['3', '2', '7', '1'],
      'idc': ['8'],
      'hm': ['1', '4', '5']}

kv = []
d2 = {}
for k, v in d1.items():
    ta=[]
    for n in v:
        if not n in kv:
            kv.append(n)
            ta.append(n)
    d2[k]=ta
print(d2)
于 2021-09-17T18:50:06.800 回答