Python 如何跳过添加到列表类型dict值中的重复值

Python 如何跳过添加到列表类型dict值中的重复值,python,dictionary,Python,Dictionary,事实上,我有一本这类的字典 d={'a':{'s':'100100.sss','s1':'100200.ss2','s2':'100200.333'}, 'b':{'t':'100100.yyy','u':'100100.rrr','i':'1001500ttt'},'c':{'f':'g','y':'o'}} 由此,我创建了这种类型的dict temp={'a':['100100','100200','100200'],'b':['100100',100100'],'c'=[]} te

事实上,我有一本这类的字典

d={'a':{'s':'100100.sss','s1':'100200.ss2','s2':'100200.333'},
  'b':{'t':'100100.yyy','u':'100100.rrr','i':'1001500ttt'},'c':{'f':'g','y':'o'}}
由此,我创建了这种类型的dict

temp={'a':['100100','100200','100200'],'b':['100100',100100'],'c'=[]}
temp={'a':['100100','100200'],'b':['100100'],'c'=[]}
为此,我使用这样的代码

temp={}
for k,v in d.items():
    temp[k]=[]
    for key,val in v.items():
    templist=val.split(".")
    if templist[0].isdigit():
            if templist[0] not in a.values():
                temp[k].append(templist[0])
            else:
                continue
实际上我想要这种类型的dict

temp={'a':['100100','100200','100200'],'b':['100100',100100'],'c'=[]}
temp={'a':['100100','100200'],'b':['100100'],'c'=[]}
解释一下它的作用。它迭代
d
中的所有项,给出键/值对。每个值都是字典,您可以忽略其中的键,因此它会对值进行迭代。这些都是通过槽分裂。结果列表将转换为
,使值唯一,然后返回列表(不确定是否确实需要该步骤)。最后,键、值对列表被转换回字典

temp = {}
for k,v in d.items():
    for key,val in v.items():
        fn = val.split('.')[0]
        if fn.isdigit():
            temp.setdefault(k, set()).add(fn)
print dict((k, list(v)) for k, v in temp.items())
解释一下它的作用。它迭代
d
中的所有项,给出键/值对。每个值都是字典,您可以忽略其中的键,因此它会对值进行迭代。这些都是通过槽分裂。结果列表将转换为
,使值唯一,然后返回列表(不确定是否确实需要该步骤)。最后,键、值对列表被转换回字典

temp = {}
for k,v in d.items():
    for key,val in v.items():
        fn = val.split('.')[0]
        if fn.isdigit():
            temp.setdefault(k, set()).add(fn)
print dict((k, list(v)) for k, v in temp.items())
印刷品

{'a': ['100100', '100200'], 'b': ['100100']}
或作为一个班轮:

dict((k, list(set(e.split('.')[0] for e in v.values() if e.split('.')[0].isdigit()))) for k,v in d.items())
印刷品

{'a': ['100100', '100200'], 'b': ['100100']}
或作为一个班轮:

dict((k, list(set(e.split('.')[0] for e in v.values() if e.split('.')[0].isdigit()))) for k,v in d.items())

仅适用于Python
2.7+
3+

>>> d = {'a': {'s': '100100.sss', 's1': '100200.ss2', 's2': '100200.333'},
         'b': {'t': '100100.yyy', 'u': '100100.rrr'}}
>>> {k:{el.split('.')[0] for el in v.itervalues()} for k,v in d.iteritems()}
{'a': set(['100100', '100200']), 'b': set(['100100'])}

仅适用于Python
2.7+
3+

>>> d = {'a': {'s': '100100.sss', 's1': '100200.ss2', 's2': '100200.333'},
         'b': {'t': '100100.yyy', 'u': '100100.rrr'}}
>>> {k:{el.split('.')[0] for el in v.itervalues()} for k,v in d.iteritems()}
{'a': set(['100100', '100200']), 'b': set(['100100'])}

这是一个解决你的问题的方法。人为破坏输出以避免滚动

{k: list(set([i.split('.')[0] for i in v.values()])) for k, v in d.iteritems()}

{'a': ['100100', '100200'], 
 'b': ['100100']}{'a': ['100100', '100200'], 
 'c': ['g', 'o'], 
 'b': ['100100', '1001500ttt']}

这是一个解决你的问题的方法。人为破坏输出以避免滚动

{k: list(set([i.split('.')[0] for i in v.values()])) for k, v in d.iteritems()}

{'a': ['100100', '100200'], 
 'b': ['100100']}{'a': ['100100', '100200'], 
 'c': ['g', 'o'], 
 'b': ['100100', '1001500ttt']}

及时打败我。很好的方法。你不需要两对方括号。@RomanBodnarchuk:我知道,但这很难理解,没有方括号会更难。@vartec所以不要写这样的一行:)@vartec我试过你的代码,它只在所有值都包含“.”的情况下工作,如果一些值没有“.”那么即使这样也会出现。等等,我会及时更新我的问题。很好的方法。你不需要两对方括号。@RomanBodnarchuk:我知道,但这很难理解,没有方括号会更难。@vartec所以不要写这样的一行:)@vartec我试过你的代码,它只在所有值都包含“.”的情况下工作,如果一些值没有“.”那么即使这样也会出现。等等,我将更新我的问题他们没有条件检查“i.split('...)[0]是否为数字,我更新了我的dict他们没有条件检查“i.split('..)[0]是否为数字,我更新了我的dict