2014-03-26 60 views
0

這裏是我的字典:獲得一個值的特定部分出一本字典值

article_names = {'AppliedEthics': (14, ['Ngaiklin', 'ip:pD950754B.dip.t-dialin.net']), 
'Anarchism': (406, ['Bobdobbs1723', 'Brion_VIBBER', 'DanKeshet', 'David_depaoli', 
'Eclecticology', 'Graft', 'Lee_Daniel_Crocker', 'Peter_Winnberg', 'Quercusrobur', 
'The_Cunctator', 'Tzartzam', 'ip:151.140.141.30', 'ip:206.82.16.35', 'ip:216.103.84.145', 
'ip:24.188.31.147']), 'AmericanSamoa': (14, ['Ngaiklin', 'ip:office.bomis.com']), 
'AccessibleComputing': (14, ['Ngaiklin', 'RoseParks'])} 

正如你看到它在article_names的格式[名]:([編輯數量],[n個用戶誰編輯它])

我想爲每個字典鍵(也就是數字後的括號內的部分)取值的第二部分,並將它放入用戶的計數,然後將它們放回到不同的字典中。我已經有一段時間了,我昨晚沒有睡覺,所以我確定這很容易,但我被打敗了。

的什麼,我試圖把它加工成範例:


Anarchism        [15] (number of users who edited the article) 
AppliedEthics       [2] 
AmericanSamoa       [2] 
AccessibleComputing     [2] 

我有這個功能,因爲他們不是類型的字典工作正常我的其他數據集,我做不到爲了我的生活,把這件事情變成更容易合作的事情......我感到愚蠢。

def formatter(sorted, type, edit_var, ID): #ID is just to identify if it's that god forsaken dict 
    count = 0 
    print() 
    for line in sorted: 
     count+=1 
    print("Printing the top {} {} in regards to {}:\n ".format(count, type, edit_var)) 
    print("{:37} {:4}".format(37*"-", 4*"-")) 
    for line in sorted: 
     print("{:37} {}".format(line[0], line[1])) 

回答

2

你可以用元組拆包做到這一點:

for k, (num, users) in article_names.items(): 
    print k, len(users) 

article_names.items()把它變成元組的列表:

article_names.items() 
# [('AppliedEthics', (14, ['Ngaiklin', 'ip:pD950754B.dip.t-dialin.net'])), ('Anarchism', (406, ['Bobdobbs1723', 'Brion_VIBBER', 'DanKeshet', 'David_depaoli', 'Eclecticology', 'Graft', 'Lee_Daniel_Crocker', 'Peter_Winnberg', 'Quercusrobur', 'The_Cunctator', 'Tzartzam', 'ip:151.140.141.30', 'ip:206.82.16.35', 'ip:216.103.84.145', 'ip:24.188.31.147'])), ('AmericanSamoa', (14, ['Ngaiklin', 'ip:office.bomis.com'])), ('AccessibleComputing', (14, ['Ngaiklin', 'RoseParks']))] 

這意味着每個項目看起來像:

('AppliedEthics', (14, ['Ngaiklin', 'ip:pD950754B.dip.t-dialin.net'])) 

k, (n, users)將這三部分解析爲三個變量。

1

好的,所以你有效地想要返回編輯者的list的長度。你可以用字典理解來做到這一點:

>>> from pprint import pprint 
>>> edits = {k: [len(edits)] for k, (num, edits) in article_names.items()} 
>>> pprint(edits) 
{'AccessibleComputing': [2], 
'AmericanSamoa': [2], 
'Anarchism': [15], 
'AppliedEthics': [2]} 

一個很好的簡單的一行;它似乎是您在問題中指定的期望輸出。這是有效的,因爲每個值是tuple,並且list編輯是tuple的第二項。

1

返回你需要得到編輯的字典裏面的元組內的列表的長度編輯器的數量,它是像這樣的例子做:

我使用你的建議相同的字典:

mydict = {'AppliedEthics': (14, ['Ngaiklin', 'ip:pD950754B.dip.t-dialin.net']),'Anarchism': (406, ['Bobdobbs1723', 'Brion_VIBBER', 'DanKeshet', 'David_depaoli', 'Eclecticology', 'Graft', 'Lee_Daniel_Crocker', 'Peter_Winnberg', 'Quercusrobur', 'The_Cunctator', 'Tzartzam', 'ip:151.140.141.30', 'ip:206.82.16.35', 'ip:216.103.84.145','ip:24.188.31.147']), 'AmericanSamoa': (14, ['Ngaiklin', 'ip:office.bomis.com']),'AccessibleComputing': (14, ['Ngaiklin', 'RoseParks'])} 
for key in mydict: 
    print key, [len(mydict[key][1])] 

你會得到作爲輸出:

AppliedEthics [2] 
Anarchism [15] 
AmericanSamoa [2] 
AccessibleComputing [2] 
+0

藉助於此,我得到「長度= [(鍵,LEN(mydict [鍵] [1])),用於mydict鍵] 類型錯誤:「詮釋'對象不是可以支付的'扔在我身上。我在Python 3.3。3,所以我也盡我所能來調整。我假設在我的程序中有其他地方正在做一個int,它會搞砸了嗎? – user3268270

+0

我在python 2.7.2上測試了我的代碼,不知道這個錯誤來自哪裏。這裏是一個在線Python解釋器:http://repl.it/languages/Python – najjarammar

+0

我需要使用3.3.3 :(我不懷疑它的工作原理!它與我一直在嘗試的東西類似不幸的是,2.x和3.x之間的差異已經毀了我在這方面的努力 – user3268270

1

如果你想結果存儲在元組的列表:

[(i,len(d[i][1])) for i in d] 

和在詞典:

{i:len(d[i][1]) for i in d}