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函数中添加()就可以了。