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

Python:如何获取所有值的总和,直到达到字典中的特定键为止,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我是python新手,对字典操作有疑问。 我正在维护一本字典,如下所示: dict = {counter:distance}. input_key = raw_input() dist = 0 for key,value in dict: if key == input_key break else dist += value return dist 例如- dict = {1:1, 2:10, 3:27, 4:10, 5:7, 6:10} 对于给定的键,我希望找到到达

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

 dict = {counter:distance}.
input_key = raw_input()
dist = 0
for key,value in dict:
if key == input_key
    break
else
    dist += value
return dist
例如-

 dict = {1:1, 2:10, 3:27, 4:10, 5:7, 6:10}
对于给定的键,我希望找到到达该键的总距离。
对于给定的键=5,返回的总距离应为
(1+10+27+10)=48。

我想出了一个简单的解决办法如下-

 dict = {counter:distance}.
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 number 100\t2943\t3

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

这样,输出文件中的同一行可以基于docid和termid进行多次修改

我希望减少在输出文件中搜索“^docid\ttermid”模式然后修改行所花费的时间。因此,我计划维护一个字典,它应该在输出文件中维护偏移量。
通过这种方式,我可以在字典上循环并在文件中获取偏移量,读取行并修改相同的行。

可能是这样的:

input_key = int(raw_input())

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

>>> dict = {1:1, 2:10, 3:27, 4:10, 5:7, 6:10}
>>> sum(dict[i] for i in xrange(1, 5))
48

请注意,您给出的代码不会一致工作,因为dictionary对象中未定义键顺序;键值对可以以任何顺序进行迭代。此答案中的代码将遍历数字1到
input\u key
-1,对字典中存储在这些键上的值求和。

您需要做的第一件事是对可以使用的dict进行排序

以下是一个例子:

import collections
input_key = int(raw_input()) # In this example I suppose is 5
dict = {1:1, 2:10, 3:27, 4:10, 5:7, 6:10}
od = collections.OrderedDict(sorted(dict.items()))
In: sum(od[m] for m in filter(lambda x: x<input_key, od))
Out: 48
导入集合
input_key=int(raw_input())#在本例中,我假设为5
格言={1:1,2:10,3:27,4:10,5:7,6:10}
od=collections.OrderedDict(已排序(dict.items()))

In:sum(od[m]表示过滤器中的m(lambda x:x您想要做的事情无法完成,并且无法获得可重复的答案。Python字典是无序的。您将在Python实现中获得任意答案


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

字典不是有序映射。您需要使用其他序列数据结构,或者如果需要映射

而且,在字典上迭代不会生成键值对,而是生成键

以下是一个解决方案,它使用:


如果数据结构中缺少键,则可以使用(否则,使用列表,正如其他人已经建议的那样)


<>也避免命名你的变量<代码> DIST .< /P>你依赖字典中的顺序。为什么这是一个DICT?无论如何,如果<代码>计数器每次值总是增加1,你应该使用一个列表。有很多缺失的计数器吗?否则你应该考虑使用<代码>列表>代码>字典中的关键字可以是一些东西。ng else以及字符串。此答案虽然与原始问题中的代码相同,但也依赖于未定义的字典键顺序。更改字典可能会导致键以完全不同的顺序迭代,从而产生不同的结果。@undefinedisnotafunction Good catch,added。我不同意。我显式回答他回答了他的问题,解释了为什么他不能做他想做的事情,然后给出了如何继续的提示。OP然后可以重新实施,如果他遇到问题,可以回来。我认为这种方法可以提高肌肉学习记忆。如果我明确地实施,他们只会复制/粘贴/忘记。
def distance(d, k):
    return sum((x[1] for x in sorted(d.items(), key=itemgetter(0)) if x[0] < k))
from collections import defaultdict
data = defaultdict({ ... }, lambda: 0)

def dist_until(i, data):
    return sum(data[j] for j in range(1, i))