2012-04-17 59 views
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'=[]} 

回答

1
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()) 
+0

我已更新我的問題 – user1182090 2012-04-17 09:55:11

+0

@ -eumiro感謝它的工作 – user1182090 2012-04-17 10:12:21

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,這使得值是唯一的,然後返回列表(不確定是否真的需要該步驟)。最後,鍵值對的列表被轉換回字典。

+0

打我在時間。偉大的方法。 – DonCallisto 2012-04-17 09:41:29

+0

@jamylak:對不起,錯過了字符串拆分。更新 – vartec 2012-04-17 09:44:59

+0

是的,我注意到,它現在的作品 – jamylak 2012-04-17 09:45:40

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'])} 
+0

您忘了提及這隻適用於Python 3+。 – vartec 2012-04-17 09:50:26

+0

在2.7+和3+中工作 – jamylak 2012-04-17 09:51:11

+0

啊,正確的字典和集合解析得到了回報。 – vartec 2012-04-17 09:53:31

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']} 
+0

他們沒有條件檢查「i.split('。')[0]是否是數字,我更新了我的字典 – user1182090 2012-04-17 10:01:32