Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字典值中获取值的特定部分_Python_List_Dictionary_Formatting - Fatal编程技术网

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

Python 从字典值中获取值的特定部分,python,list,dictionary,formatting,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', 'Querc

这是我的字典:

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'])}
{i:len(d[i][1]) for i in d}
如您所见,它的格式为文章名称[名称]:([编辑次数],[n个编辑它的用户])

我希望为每个字典键获取值的第二部分(即数字后面括号中的部分),并将其转换为用户数,然后再将其存入另一个字典。这件事我已经被难住了一段时间,我昨晚没睡,所以我确信这很容易,但我已经精疲力竭了

我试图将其处理成的示例:


我有这个函数,它可以很好地用于我的其他数据集,因为它们不是dicts,而且我一生都无法将它转换成更容易使用的东西。。。我觉得自己很愚蠢

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

您可以通过元组解包来实现这一点:

for k, (num, users) in article_names.items():
    print k, len(users)
article\u 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']))]
[(i,len(d[i][1])) for i in d]
这意味着每个项目看起来都像:

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

然后
k,(n,用户)
将这三个部分解析为三个变量。

您可以通过元组解包来实现这一点:

for k, (num, users) in article_names.items():
    print k, len(users)
article\u 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']))]
[(i,len(d[i][1])) for i in d]
这意味着每个项目看起来都像:

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

然后
k,(n,用户)
将这三个部分解析为三个变量。

好的,因此您实际上希望返回编辑器的
列表的长度。您可以通过字典理解来实现这一点:

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

一个很好的简单的一行;这似乎是您在问题中指定的期望输出。这是因为每个值都是一个
元组
,编辑器的
列表
是该
元组
的第二项

确定,因此您实际上希望返回编辑器的
列表
的长度。您可以通过字典理解来实现这一点:

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

一个很好的简单的一行;这似乎是您在问题中指定的期望输出。这是因为每个值都是一个
元组
,编辑器的
列表
是该
元组的第二项

要返回编辑器的数量,需要获取字典中元组中编辑器列表的长度,操作如下示例:

我用的是你建议的那句话:

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]

要返回编辑器的数量,需要获取字典中元组中编辑器列表的长度,操作如下所示:

我用的是你建议的那句话:

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]

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

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']))]
[(i,len(d[i][1])) for i in d]
在字典里:

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'])}
{i:len(d[i][1]) for i in d}

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

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']))]
[(i,len(d[i][1])) for i in d]
在字典里:

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'])}
{i:len(d[i][1]) for i in d}

有了这个,我得到了“length=[(key,len(mydict[key][1]),用于mydict]TypeError中的key:“int”对象是不可订阅的”。我使用的是Python3.3.3,所以我也尽了最大努力进行了调整。我假设在我的程序中的其他地方有东西被设置为int,它把事情搞砸了?我在Python2.7.2上测试了我的代码,不知道这个错误是从哪里来的。这是一个在线python解释器:我被要求使用3.3.3:(我不怀疑它是否有效!它与我一直尝试的东西类似,但不幸的是,2.x和3.x之间的差异破坏了我在这方面的努力。这里是python 3.3的参考,len(s)检查:我在Python3.3.2上测试了它,只需在print函数中添加()就可以了。这就是我所能帮助的:)祝你好运。有了这个,我得到了“length=[(key,len(mydict[key][1])for key in mydict]TypeError:“int”object is not subscriptable”的提示。我使用的是Python3.3.3,所以我也尽了最大努力进行了调整。我假设在我的程序中的其他地方有东西被设置为int,它把事情搞砸了?我在Python2.7.2上测试了我的代码,不知道这个错误是从哪里来的。这是一个在线python解释器:我被要求使用3.3.3:(我不怀疑它是否有效!它与我一直尝试的东西类似,但不幸的是,2.x和3.x之间的差异破坏了我在这方面的努力。这里是python 3.3的参考,len(s)检查一下:我在Python3.3.2上测试了它,只需在print函数中添加()就可以了。