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