0

其实我有这种类型的字典

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

从这里我正在创建这种类型的字典

temp={'a':['100100','100200','100200'],'b':['100100',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

其实我想要这种类型的字典

temp={'a':['100100','100200'],'b':['100100'],'c'=[]}
4

4 回答 4

2
d={'a':{'s':'100100.sss','s1':'100200.ss2','s2':'100200.333'},
  'b':{'t':'100100.yyy','u':'100100.rrr'}}

temp = dict([(k, list(set([x.split('.')[0] for x in v.values()]))) \
       for k,v in d.items()])

解释一下它的作用。它遍历 中的所有项目d,给出键/值对。每个值都是字典,您忽略其中的键,因此它会迭代值。这些是通过拆分传递的。结果列表转换为set,这使值唯一,然后返回列表(不确定您是否真的需要该步骤)。最后,键值对列表被转换回字典。

于 2012-04-17T09:40:29.030 回答
2
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())
于 2012-04-17T09:41:50.233 回答
1

仅适用于 Python2.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'])}
于 2012-04-17T09:42:35.557 回答
0

这是在 IDLE 中解决的问题的解决方案。输出被人为地破坏以避免滚动。

{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']}
于 2012-04-17T09:56:19.553 回答