python输出字典中的值_Python:从文件的输出中读取值并将其解释为字典中的键值...

时间:2025-03-28 21:12:49

我怀疑你要找的不是一个大的dict,而是一个dict列表,每行一个。例如:dicts = []

for line in sys.stdin:

(eval(line))

实际上,我会用^{}(正如^{})文档所建议的那样)来编写这篇文章,*并将其简化为一个列表理解:

^{pr2}$

但是不管怎样,dicts中的每个元素都是dict。所以,要将它们全部打印出来:for d in dicts:

print d

唯一的问题是,你想把它们分类。我不知道你想怎样分类。一般来说,排序字典没有任何意义(这就是为什么python2给您一个无意义的顺序,python3给您一个TypeError)的原因。当然,也有一些特殊的情况,其中有一些有意义的顺序,但每一种情况都是不同的。在

也许在您的例子中,您希望依赖于这样一个事实:每个dict都有一个键,并根据该键进行排序?如果是:for d in sorted(dicts, key=lambda d: ()[0]):

print d

但那只是猜测。在

从评论中:how do I do a count on let say, charcount (it exists in the value part of the dict) of all dictionaries with same key.

如果你想这么做,你有两个选择。在

首先,您可以搜索整个字典列表,如下所示:charcounts = []

for d in dicts:

for k, v in ():

if k == key:

(v['charcount'])

但在这种情况下,最好使用“multidict”结构,也就是说,dict的值都是列表(在本例中是dict)。在

有两种简单的方法可以在dict上构建setdefault方法,或者collections中的defaultdict类。两者都同样简单;不同的是第一个给你一个常规的dict,所以它是一个KeyError来寻找一个不存在的键,而第二个给你一个defaultdict,这样你会得到一个空列表,寻找一个不存在的键。我先给你看第一个,但实际上,你得决定你要哪一个。在dicts = {}

for line in :

d = ast.literal_eval(line)

for k, v in (): # should only be one

(k, []).append(v)

这是一个有点多的工作要设置,但较少的工作来搜索。例如,上面的混乱可以用一行来代替:charcounts = [d['charcount'] for d in dicts[key]]

…而且,如果dicts很大,那么速度会快得多,因为它只需要查看具有匹配键的那些,而不是所有键。在

为了让您了解这是什么样子,下面是dicts示例输入:{262968617233162240:

[

{'!!!': False, '#': False, '@': False, 'charcount': 18, 'longword': True, 'sscore': False, 'stop': False, 'title': False, 'uppercase': False, 'url': False, 'word': 'good#1st#time#will'},

{'!!!': False, '#': False, '@': False, 'charcount': 2, 'longword': False, 'sscore': False, 'stop': True, 'title': False, 'uppercase': False, 'url': False, 'word': 'be'},

{'!!!': False, '#': False, '@': False, 'charcount': 5, 'longword': False, 'sscore': False, 'stop': False, 'title': False, 'uppercase': False, 'url': False, 'word': 'going'},

{'!!!': False, '#': False, '@': False, 'charcount': 5, 'longword': False, 'sscore': False, 'stop': False, 'title': False, 'uppercase': False, 'url': False, 'word': 'back#'}

],

263790847424880641:

[

{'!!!': False, '#': False, '@': False, 'charcount': 33, 'longword': True, 'sscore': False, 'stop': False, 'title': False, 'uppercase': False, 'url': True, 'word': '/p/rx9939civ8/\xc2\xa0'}

]

}

另一条评论:So the output that I am looking for is: { 262968617233162240, charcount: 30}

好吧,这在Python中不是有效的。它看起来像是介于集合和dict之间的东西。dict是一组键-值对,每个键和值之间有一个冒号。在

在Python中,是有效的:{262968617233162240: {'charcount': 30}}

你怎么知道的?在

好吧,我已经向你展示了如何获取任何给定密钥的字符数列表。在将它们相加之前,必须将它们全部转换为数字:charcounts = [int(d['charcount']) for d in dicts[key]]

然后,要将它们相加,只需调用sum:charcount = sum(int(d['charcount']) for d in dicts[key])

现在,我们如何构建您想要的输出呢?在charcount = sum(int(d['charcount']) for d in dicts[key])

output_dict = {key: {'charcount': charcount}}

如果要对多段对话中的每个键执行此操作:for key, values in ():

charcount = sum(int(d['charcount']) for d in values)

output_dict = {key: {'charcount': charcount}}

# now do something with output_dict

*或者,更好的方法是,将保存的代码改为使用实际用于数据交换的格式,如JSON或pickle。在