Python:如何获得所有值的和,直到在字典中达到特定键为止

2024-09-28 05:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,对字典操作有疑问。
我正在维护一本词典,如下所示-

 dict = {counter:distance}.

例如-

^{pr2}$

对于一个给定的键,我希望找到到达该键的总距离。
对于给定的key=5,返回的总距离应为(1+10+27+10) = 48.

我想出了一个简单的解决方案如下-

input_key = raw_input()
dist = 0
for key,value in dict:
if key == input_key
    break
else
    dist += value
return dist

我正在寻找一些内置函数或库,我可以用来实现这一点。在

我的要求是将数据写入输出文件。 格式如下-docid\t termid\t编号 100\t2943\t3

我有在每个docid和termid上运行的for循环。 Termid可以在循环中重复,在这种情况下,我需要修改输出文件中的行。因此,如果docid 100和termid 2943再次被输入数字为58,则上述行需要更改为- 100\t2943\t3\t58

这样,可以根据docid和termid多次修改输出文件中的同一行。在

我希望减少在输出文件中搜索“^docid\ttermid”模式,然后修改行所花费的时间。因此,我计划维护一个字典,它应该在输出文件中保持偏移量。 这样我就可以遍历字典,得到文件中的偏移量,读取行并修改它。在


Tags: 文件key距离forinput字典valuedist
3条回答

字典不是有序映射。您需要使用其他序列数据结构,如果需要映射,则使用^{}。在

而且,遍历字典不会生成键值对,而是生成键。在

下面是一个使用^{}的解决方案:

>>> import itertools
>>> from collections import OrderedDict
>>>
>>> d = OrderedDict([(1,1), (2,10), (3,27), (4,10), (5,7), (6,10)])
>>> print sum(map(d.get, itertools.takewhile(lambda key: key != 5, d)))
48

也许是这样的:

input_key = int(raw_input())

dist = sum(dict[i] for i in xrange(1, input_key))

例如:

^{pr2}$

请注意,您给出的代码将不能一致地工作,因为在dictionary对象中键顺序是未定义的;键值对可以按任何顺序迭代。这个答案中的代码将迭代数字1到input_key-1,将字典中存储在这些键处的值相加。在

你想做的事不能用dict来做,而得到可重复的答案。Python字典是无序的。您将在Python实现中得到任意答案。在

根据您使用的Python版本,您可以使用OrderedDict。在

相关问题 更多 >

    热门问题