从字典值中获取值的特定部分

时间:2014-03-26 20:51:41

标签: python list dictionary formatting

这是我的字典:

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 [name] :( [编辑次数],[n个编辑过的用户])

我想获取每个字典键的值的第二部分(Aka数字后括号中的部分),并在将它们存回到不同的字典之前将其转换为用户数。我已经被这一段时间困扰了一段时间,昨晚我没有睡觉,所以我确信这很容易,但是我被打败了。

我正在尝试将其处理成的示例:


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]))

4 个答案:

答案 0 :(得分: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 :(得分: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,编辑器的listtuple的第二项。

答案 2 :(得分: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]

答案 3 :(得分:1)

如果要将结果存储在元组列表中:

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

并在字典中:

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