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

これから私はこのタイプのdictを作成しています

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

実際には、このタイプのdictが必要です

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

4 に答える 4

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 に答える
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 に答える
1

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'])}
于 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 に答える