迭代字典python的子部分

时间:2013-08-13 14:12:07

标签: python loops dictionary

字典中的元素是否在python中按特定顺序排列?

我想做点什么:

for i in dict:
    for j in dict[e:]:

运行此代码时出错。你将如何实现两个for循环,第二个循环只运行在第二个循环元素之后的元素?

根据要求

修改

是字典
class Num:
    def __init__(self, sum = 0):
        self.sum = sum

我想将所有数字与所有其他数字相乘,并将每个数字的结果添加到成员总和中。 例如:

dict = {1: Num(), 2: Num(), 3: Num()}

所需的for循环可以:

dict[1].sum += 1*2
dict[2].sum += 1*2
dict[1].sum += 1*3
dict[3].sum += 1*3
dict[2].sum += 2*3
dict[3].sum += 2*3

我需要循环

或者说相同:

for i in dict:
    for j in dict[e:]:

是否有类似 HashableDict 的内容?

4 个答案:

答案 0 :(得分:1)

字典没有订单/索引。您可以使用OrderedDict或首先列出字典项。

mydict.items() #returns your dictionary in list for with tuples(key,value) with order

所以对你来说,

class Num:
    def __init__(self, sum = 0):
        self.sum = sum

    def _add(self,num):
        self.sum += num

mydict = {1:Num(), 2:Num(), 3:Num()}

for key in mydict:
    mydict[key]._add(sum([key*otherkey for otherkey in mydict if otherkey != key]))

for key,value in mydict.items():
    print key,value.sum

输出:

 1 5
 2 8
 3 9

答案 1 :(得分:1)

取决于你想做什么。

如果你想用相同大小的较小块分割dict,你可以通过keys()来实现:

keys = d.keys()
for key in keys[5:]:
    print key, d[key]

答案 2 :(得分:0)

Python有一个OrderedDict,其中的元素是根据插入时间排序的。

您可以通过以下方式将您的字典转换为有序字典:

orderedDict = OrderedDict(sorted(yourDict.items(), key=lambda t: t[0]))

答案 3 :(得分:0)

现在很清楚你想要做什么,你似乎想要组合键。

import itertools
d = {1: Num(), 2: Num(), 3: Num()}
for i, j in itertools.product(dict.keys(), dict.keys()):
    if i != j:
        dict[i].sum += i*j
        dict[j].sum += i*j