2014-03-26 61 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}